현대 모비스 경진대회 “2번” 문제를 풀어보았습니다.

혹시 해당 포스팅이 저작권상 문제가 되는 경우 이메일로 연락을 주시면 조치하도록 하겠습니다.

이메일 - jano.jeon@gmail.com


Solution

문제를 유출하지 말라는 조건이 있었기 때문에 문제는 생략하고 본인의 문제에 대한 이해 부분과 코드만 작성했습니다.

[문제 이해]

  • 맨 앞 or 뒤가 a인 경우 제거
  • 맨 앞뒤가 모두 b인 경우 제거
  • 제거하다 마지막에 남은 문자가 a면 true, b면 false

이해한 내용을 바탕으로 코드를 작성했습니다.

[답안 제출 코드]

def solution(a):
    answer = []

    for s in a:
        while True:
            flag = 0
            if s[0] == 'a':
                flag += 1
                s = s[1:]
            if s[-1] == 'a':
                flag += 1
                s = s[:-1]

            if s[0] == 'b' and s[-1] == 'b':
                flag += 1
                x = s.count('a')
                while x > 0 and s[0] == 'b':
                    s = s[1:-1]
                    x -= 1
            
            if 'b' not in s or 'a' not in s or flag == 0:
                break

        if s == 'a':
            answer.append(True)
            continue
        else:
            answer.append(False)
            continue

    return answer

코드 실행 시 테스트 케이스가 1개 빼고 모두 실패가 나와서 정말 의문이었습니다.

하지만 답안 제출이 끝나고 난 뒤에 다시 코드를 확인해보니 크게 실수한 부분이 있었습니다.

[원래 의도한 코드]

def solution(a):
    answer = []

    for s in a:
        while True:
            flag = 0
            if s[0] == 'a':
                flag += 1
                s = s[1:]
            if s[-1] == 'a':
                flag += 1
                s = s[:-1]

            if s[0] == 'b' and s[-1] == 'b':
                flag += 1
                s = s[1:-1]
            
            if 'b' not in s or 'a' not in s or flag == 0:
                break

        if s == 'a':
            answer.append(True)
            continue
        else:
            answer.append(False)
            continue

    return answer

b를 제거하는 조건문에 while문을 넣었던 것이 잘못이었습니다.

문제를 풀기위해 이것저것 넣어보면 테스트하던 코드가 일부 남아있었습니다…

풀이가 의도대로 되었다면 맞출 수 있었던 문제였기에 너무 아쉬웠습니다.