백준 1343번 바로가기
나의 풀이#
board = []
for i in input().split('.'):
if len(i) % 2 != 0:
print(-1)
break
if (a:=len(i))%4 == 0:
board.append("AAAA"*(a//4))
elif (b:=len(i))%4 == 2:
board.append("AAAA"*(b//4) + "BB")
else:
print(*board, sep=".")
고수의 풀이#
print((s:=input().replace('X'*4,'A'*4).replace('XX','BB'),-1)['X'in s])
출처
CODE REVIEW#
- X의 갯수에 따라 처리를 달리 해주어야하는 문제였다. 실버 V치고는 쉬운 편에 속한다.
- 고수의 풀이의 논리가 신박했는데, 정리해보면 다음과 같다.
- XXXX가 있다면 AAAA로 바꾼다.
- 위의 처리 이후에 XX가 남았다면 BB로 바꾼다.
- 앞의 처리 이후에도 X가 남았다면
-1
을 출력, 남아있는 X가 없다면 처리값을 출력한다.
- Greedy Algorithm에 대해 살펴보면
the locally optimal choice at each stage
, 즉 현재의 최선의 수 만을 생각하는 것이다. 먼 미래의 영향을 고려하지 않고 현재 상태만을 토대로 행동을 결정하는 것이다.