Kim Seon Deok
[백준] 1343번 폴리오미노 본문
https://www.acmicpc.net/problem/1343
Board = input()
i = 0
while True:
if i >= len(Board):
break
elif Board[i:i+4] == "XXXX":
i += 4
Board = Board.replace("X","A",4)
elif Board[i:i+2] == "XX":
i += 2
Board = Board.replace("X","B",2)
elif Board[i] == ".":
i += 1
else:
Board = -1
break
print(Board)
i = 0
while True:
if i >= len(Board):
break
elif Board[i:i+4] == "XXXX":
i += 4
Board = Board.replace("X","A",4)
elif Board[i:i+2] == "XX":
i += 2
Board = Board.replace("X","B",2)
elif Board[i] == ".":
i += 1
else:
Board = -1
break
print(Board)
처음에는 for문으로 풀었지만 index의 범위를 벗어나, while문에 무한루프를 걸어주었다.
1. .과 x 로 이루어진 보드판을 입력받음
2. .는 그대로 출력
3. X는 4번 연속되면 A로, 2번 연속되면 B로 출력
4. X가 홀수개일 경우 -1을 출력
<또 다른 풀이>
맨 처음 문제를 읽고 replace함수가 떠오르지 않아서 풀었던 방법이다.
Board = input()
dot = [] # .의 위치를 담을 빈 리스트
for j in range(0,len(Board)):
if Board[j] == ".":
dot.append(j)
board = list(Board.split(".")) # 맨 처음에 입력받은 Board를 . 을 기준으로 split
counter = 0 # X덩어리의 길이가 홀수개인지 세리는 변수
for k in range(0, len(board)):
if board[k].count("X") % 2 == 1: # X 덩어리의 길이가 홀수라면
counter += 1
if counter >=1 : # X 덩어리의 길이가 홀수인 요소가 리스트에 한개라도 존재한다면
board.clear() # 리스트 내의 모든 요소를 지움
print("-1") # -1 출력
elif counter ==0: # X 덩어리의 길이가 모두 짝수라면
for i in range(0,len(board)):
board[i] = (board[i].count("X")//4) * "AAAA" + (((board[i].count("X")-board[i].count("X")//4*4)) //2) * "BB" # 주어진 규칙대로 문자 변경
board1 = ''.join(board) # ''을 기준으로 모든 X덩어리를 붙여 하나의 문자열로 만듦
board2=list(board1) # 다시 한문자씩 리스트로 만듦
for k in range(0,len(dot)): # 원래 위치에 .을 insert 함
board2.insert(dot[k],".")
print(''.join(board2))
dot = [] # .의 위치를 담을 빈 리스트
for j in range(0,len(Board)):
if Board[j] == ".":
dot.append(j)
board = list(Board.split(".")) # 맨 처음에 입력받은 Board를 . 을 기준으로 split
counter = 0 # X덩어리의 길이가 홀수개인지 세리는 변수
for k in range(0, len(board)):
if board[k].count("X") % 2 == 1: # X 덩어리의 길이가 홀수라면
counter += 1
if counter >=1 : # X 덩어리의 길이가 홀수인 요소가 리스트에 한개라도 존재한다면
board.clear() # 리스트 내의 모든 요소를 지움
print("-1") # -1 출력
elif counter ==0: # X 덩어리의 길이가 모두 짝수라면
for i in range(0,len(board)):
board[i] = (board[i].count("X")//4) * "AAAA" + (((board[i].count("X")-board[i].count("X")//4*4)) //2) * "BB" # 주어진 규칙대로 문자 변경
board1 = ''.join(board) # ''을 기준으로 모든 X덩어리를 붙여 하나의 문자열로 만듦
board2=list(board1) # 다시 한문자씩 리스트로 만듦
for k in range(0,len(dot)): # 원래 위치에 .을 insert 함
board2.insert(dot[k],".")
print(''.join(board2))
'python > Algorithm' 카테고리의 다른 글
[백준]1302 베스트셀러 (0) | 2022.01.08 |
---|---|
[백준]1158 요세푸스 문제 (0) | 2022.01.08 |
[코드업] [기초-리스트] 성실한 개미 (0) | 2022.01.06 |
[백준]11170 0의 개수 (0) | 2022.01.06 |
[백준]10972 다음순열 (0) | 2022.01.05 |
Comments