[문제]
행운의 번호는 2*n 자릿수를 가진 숫자인데, 왼쪽에서부터 n 개의 숫자의 합이 오른쪽에서부터 n 개의 숫자의 합과 같다.
당신에게 0을 제외한 숫자로만 이루어진 문자열 s가 주어진다. 이 문자열의 부분문자열 중 가장 긴 행운의 번호의 길이를 구하시오. 만약 행운의 번호가 없다면 0을 반환하시오.
풀이 1) - python
더보기
class Solution:
def solution(self, s):
answer=0
s=[int(i) for i in s]
for i in range(len(s)-1):
left=i
right=left+1
left_ck=right_ck=0
while left>=0 and right<len(s):
left_ck+=s[left]
right_ck+=s[right]
if left_ck==right_ck:
answer=max(answer,right-left+1)
left-=1
right+=1
return answer
풀이 2) - java
더보기
import java.lang.*;
//핵심 소스코드의 설명을 주석으로 작성하면 평가에 큰 도움이 됩니다.
public class Solution{
public int solution(String s){
int answer=0;
if(s.length()%2==0){
int len = s.length();
while(len>=2){
for(int temp=s.length();temp>=len;temp--){
if(check(s.substring(temp-len,temp))) return len;
}
len-=2;
}
}else{
int len = s.length()-1;
while(len>=2){
for(int temp=s.length();temp>=len;temp--){
if(check(s.substring(temp-len,temp))) return len;
}
len-=2;
}
}
return answer;
}
public boolean check(String s){ //부분 문자열이 행운 숫자인지 판단하는 메소드
if(s.length()%2!=0) return false; //문자열 길이가 홀수면 false 반환(예외발생을 막기위한 작업)
else{ //문자열 길이가 참일경우
int front=0, back=0;
for(int i=0;i<s.length();i++){
if(i<s.length()/2) front+=(int)(s.charAt(i)); //절반기준 앞숫자들의 합
else back+=(int)(s.charAt(i)); //절반기준 뒷숫자들의 합
}
if(front==back) return true;
else return false;
}
}
}
풀이 3) - python
더보기
class Solution:
def solution(self, s):
result = 0
tmp = list(map(int, list(s)))
for i in range(2, len(s)+1, 2):
for j in range(0, len(s)-i+1):
if sum(tmp[j:j+i//2]) == sum(tmp[j+i//2:j+i]):
result = i
return result
'workSpace > ALGORITHM' 카테고리의 다른 글
[연속 캐시] (0) | 2021.02.02 |
---|---|
[가장 짧은 팰린드롬] (0) | 2021.02.02 |
[책 넣기] (0) | 2021.02.02 |
[Python] 핸드폰 번호 가리기 (0) | 2020.12.20 |
[Python] 자연수 뒤집어 배열로 만들기 (0) | 2020.12.20 |