TIL - 알고리즘 : 회문

Heechul Yoon·2020년 4월 21일
0

LOG

목록 보기
42/62

풀이 1

def check(string):
[0] string = string.upper()

    # 문자열의 중간을 구하는 함수
    def get_middle_index(string):
        return len(string)//2
    
[1] if len(string)%2==1:
        if string[-1:get_middle_index(string):-1] == string[0:get_middle_index(string)]:
            return 1
        else:
            return 0

[2] if len(string)%2==0:
        if string[0:get_middle_index(string)] == string[-1:get_middle_index(string)-1:-1]:
            return 1
        else:
            return 0

[0] 대소문자 구분이 없이 같은 값으로 처리해야 하기 때문에 처음부터 문자열을 대문자로 바꾸고 시작한다.
[1] 문자열의 길이가 홀수일 때 중간에 있는 문자를 기준으로 뒤에 문자와 앞의 문자를 비교한다. 뒤에 문자를 역순으로 하여 앞의문자와 완벽하게 일치하면 1을 리턴한다.
[2] 중간을 기준으로 나누어 뒤의 문자와 앞의 문자를 비교한다.
[1]의 경우 가장 중간에 위치한 문자 뒤부터 역순으로 바꾸어야 하기 때문에 [2]와 다르게 -1을 하지 않는다.

풀이 2

def check(string):
[0] string = string.upper()

    # 문자열의 중간을 구하는 함수
    def get_middle_index(string):
        return len(string)//2

[1] for i in range(0, get_middle_index(string)):
        if string[i] != string[-1-i]:
            return 0
[2] return 1

[0] 대소문자 구분이 없이 같은 값으로 처리해야 하기 때문에 처음부터 문자열을 대문자로 바꾸고 시작한다.
[1] 문자열의 중간 값 까지의 문자 하나하나를 비교한다. 첫번째 인덱스의 문자와 마지막 인덱스의 문자부터 비교하기 시작하여 하나라도 다른것이 나오면 0을 리턴한다.
[2] for문을 통과하면 회문이기 때문에 1을 리턴한다.

같은 결과를 가져오지만 풀이 2의 경우 홀수와 짝수를 나누어 비교하지 않아도 되고, [2]와 달리 회문이 아닌 경우를 먼저 걸러내기 때문에 짧은 로직으로 결과를 도출 할 수 있다.

profile
Quit talking, Begin doing

0개의 댓글