Post
폴리오미노(백준 1343번) | Gihun Son

폴리오미노(백준 1343번)

💡 **Check Point !

( 해당사항 ✓체크 )

  1. 막힘 없이 수월하게 풀린 문제인가? ✓

  2. 1시간이내로 풀렸던 문제인가?

  3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?

  4. 시간을 써도 도무지 풀 수 없는 문제인가?

  5. 솔루션을 찾아봤는가?


난이도 체감

  1. 최상

  2. 하✓


이해도

  1. 완벽히 이해✓

  2. 다소 헷갈리는 부분들이 있음

  3. 이해 못함

(예외 사항을 잘 생각해보고 코드를 짜야 할 것 같다.)

문제

민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다. AAAA와 BB

이제 ‘.’와 ‘X’로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 ‘X’를 모두 폴리오미노로 덮으려고 한다. 이때, ‘.’는 폴리오미노로 덮으면 안 된다.

폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오.

Untitled

Untitled 1

나의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
B=input()
count=0
answer=''
for i in range(len(B)):
    if B[i]=='X':
        count+=1
        if i==len(B)-1 or B[i+1]=='.':
            if count%2==1:
                print(-1)
                break
            else:
                for j in range(count//4):
                    answer+='AAAA'
                for k in range((count%4)//2):
                    answer+='BB'
            count=0
    else:
        answer+='.'
else:
    if count==0:
        print(answer)
    else:
        print(-1)
  • 연속해서 나오는 X의 개수를 파악하고, 만약 X의 개수가 홀수라면 바로 -1을 출력하도록 코드를 짰다. 만약 짝수라면 출력 가능하기 때문에 조건에 따라 ‘AAAA’ 또는 ‘BB’를 문자열에 넣어주었다.
  • 여기서 내가 한가지 간과했던 것은, 만약 ‘X.’이라는 보드판이 있다면, count의 값에 따라 제대로 처리되지 않은채 answer를 출력한다는 것이다.

개선한 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
B=input()
count=0
answer=''
for i in range(len(B)):
    if B[i]=='X':
        count+=1
        if i==len(B)-1 or B[i+1]=='.':
            if count%2==1:
                print(-1)
                break
            else:
                for j in range(count//4):
                    answer+='AAAA'
                for k in range((count%4)//2):
                    answer+='BB'
            count=0
    else:
        answer+='.'
else:
    print(answer)
  • 생각해보니, count에 대한 예외가 아니라, break를 통해 for문을 나왔을 때, answer를 출력하지 않도록 하는 코드가 필요했다. 따라서 else를 추가한 것이 해결 방법이었다.
  • 아무리 생각해도 count가 0이 아닌 경우가 없는 것 같아서 생각해보았고, 위 코드처럼 작성할 수 있다.
This post is licensed under CC BY 4.0 by the author.