[백준] 1343 - 폴리오미노 (Python, 숏코딩 포함)

반응형

BAEKJOON's Logo

 

 

1343번: 폴리오미노

첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.

www.acmicpc.net

 

Contents

    * 일반 풀이와 숏 코딩 풀이 코드

    ## 일반 풀이
    board = input() # 문자열 입력받기
    board = board.replace('XXXX', 'AAAA')
    board = board.replace('XX', 'BB')
    
    if 'X' in board:
        print(-1)
    else:
        print(board)
    
    
    ## 숏코딩 풀이 
    result = input().replace('XXXX','AAAA').replace('XX','BB')
    print(-1 if 'X' in result else result)

     

     

    문제 정의

    처음에 'X' , '.'으로 이루어진 보드판이 주어졌을 때, 민식이는 가능한 AAAA와 BB로 채워 사전 순으로 가장 앞서는 답을 출력한다. 만약 모두 덮을 수 없으면 -1을 출력한다.

     

    예제 입력 및 출력

     

    일반 풀이와 숏코딩 풀이

    일반 풀이

    board = input() # 문자열 입력받기
    board = board.replace('XXXX', 'AAAA')
    board = board.replace('XX', 'BB')
    
    if 'X' in board:
        print(-1)
    else:
        print(board)

    board = input() 을 통해 문자열을 board에 저장합니다. board.replace('XXXX', 'AAAA') 에서는 board 문자열에서 앞에서부터 'XXXX'를 순차적으로 모두 찾아 'AAAA'로 바꿔줍니다. 이후에, board.replace('XX','BB')를 통해 앞 과정에서 변환되지 않은 모든 'XX'를 찾아 'BB'로 변환해 줍니다. 그 결과 board에 'X'가 존재한다면, 모두 덮은 게 아니므로 -1을 출력하고, 그게 아니라면 변환된 borad를 출력합니다.

    * 출력

    일반 풀이 실행 결과

     

    숏코딩

    board = input().replace('XXXX','AAAA').replace('XX','BB')
    print(-1 if 'X' in board else board)

    위의 코드를 2줄로 줄여보았습니다. input() 자체가 입력받은 문자열을 반환하기 때문에 바로 replace 메소드를 사용할 수 있습니다. 또한, replace 메소드는 결과로 문자열을 반환하기 때문에 연속으로 사용할 수 있으며, 앞에 사용한 replace부터 우선순위로 적용됩니다. 출력할 때는 3항 연산을 사용하였습니다. 'X'가 board에 존재하면 -1을 출력하고, 없으면 board 자체를 출력합니다.

    * 출력

    숏코딩 풀이 결과

     

    3항 연산 간략 설명

    참일 때 if 조건문 else 거짓일 때

    조건문이 True이면 '참일 때'를 반환하고, 조건문이 False 라면 '거짓일 때'를 반환합니다.

    예시)

    print('참' if True else '거짓') # '참' 출력
    print('참' if False else '거짓') # '거짓' 출력

    삼항 연산은 그 결과를 반환하기 때문에 print() 안에 쓸 수 있습니다. 

    * 출력

    삼항 연산 예제

     

    읽어주셔서 감사합니다.

    오늘도 발전하는 독자 여러분을 응원합니다.

    다음에 더 유익하고 재미있는 포스팅으로 찾아오겠습니다.

     

     

    반응형

    댓글

    Designed by JB FACTORY