현대 모비스 경진대회 “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문을 넣었던 것이 잘못이었습니다.
문제를 풀기위해 이것저것 넣어보면 테스트하던 코드가 일부 남아있었습니다…
풀이가 의도대로 되었다면 맞출 수 있었던 문제였기에 너무 아쉬웠습니다.