문제
코드
My answer
board=input()
answer=[]
board_list=board.split('.')
for i in board_list:
if(len(i)%2==1):
answer=['-1','.']
break
else:
if(len(i)%4==0):
answer.append('A'*len(i))
elif(len(i)%4>1):
answer.append('A'*(len(i)//4*4))
answer.append('B'*(len(i)%4))
else:
answer.append('B'*len(i))
answer.append('.')
answer=''.join(answer)
print(answer[:-1])
import sys
input=sys.stdin.readline
board=input().rstrip()
for i in range(len(board)):
if(board[i]=='.'):
continue
elif(board[i:i+4]=='XXXX'):
board=board[:i]+'AAAA'+board[i+4:]
elif(board[i:i+2]=='XX'):
board=board[:i]+'BB'+board[i+2:]
if('X' in board):
print(-1)
else:
print(board)
Another answer
a=input().replace('X'*4,'A'*4).replace('XX','BB')
print([a,-1]['X'in a])
풀이
그리디 문제로, 4개짜리는 전부 AAAA로 바꾸고, 이후 2개짜리를 B로 바꾸면 된다.
내 풀이 1번: '.'으로 끊은 리스트를 만들고, 각 리스트를 돌면서 홀수개면 변환이 불가하므로 종료하고, 4로 나눠떨어지면 A로 바꾸고, 4로 나눠지는데 나눠떨어지지 않으면 A,B를 섞고, 2로 나눠떨어지면 B로 바꿔줌. 마지막에 바꿔준 리스트 사이사이 원래 '.'을 추가한 후 반환
내 풀이 2번: 앞에서부터 차례대로 진행 원래 리스트를 변환하는 방식으로 4개 붙어있으면 A로, 2개붙어있으면 B로 '.'이면 패스.
다른 풀이: replace를 연속으로 써줘서 한번에 진행
마지막 코드 [a,-1]['X' in a] 가 신기했음. if문을 적지않고 bool형 인덱싱 반환 방법
728x90
반응형
'코딩테스트 > 백준[Python]' 카테고리의 다른 글
[Python] 백준 #2828 - 사과 담기 게임 (0) | 2023.08.23 |
---|---|
[Python] 백준 #14916- 거스름돈 (0) | 2023.08.23 |
[Python] 백준 #15724 - 주지수[try_again]-ing (0) | 2022.03.02 |
[Python] 백준 #18115 - 카드 놓기[try_again] (0) | 2022.03.02 |
[Python] 백준 #9375 - 패션왕 신해빈 (0) | 2022.03.01 |