python/연습문제 풀이

[백준] python 3003번

연정양 2022. 10. 18.

목차

    [백준] python 3003번

     

    3003번: 킹, 퀸, 룩, 비숍, 나이트, 폰

    첫째 줄에 동혁이가 찾은 흰색 킹, 퀸, 룩, 비숍, 나이트, 폰의 개수가 주어진다. 이 값은 0보다 크거나 같고 10보다 작거나 같은 정수이다....

    www.acmicpc.net

    문제 풀이에 앞서 자축할 점은

    2달 전 이해하지 못해 회피했던 이 문제를 풀었다는 거다 ~~^^*(폭죽)(환호)(박수)

     

    처음 python을 공부할 때에는 모든 문제를 한 번에 풀려고 해서 많이 어려웠는데

    step by step, line by line으로 문제를 이해하려는 시도를 하다 보니 

    처음보다는 이해력이 좋아진 게 아닐까 싶다*^^*

     

    알고보면 간단하지만 문제가 길어 진입장벽이 꽤 높고

    여러 번의 시행착오를 겪게 한 문제

     

    1차 try.

    king, queen, rook, bishop, knight, pawn = map(int, input().split())
    if (0 <= king <= 10) and (0 <= queen <= 10) and (0 <= rook <= 10) and (0 <= bishop <= 10) and (0 <= knight <= 10) and (0 <= pawn <= 10):
        print((1 - king, 1 - queen, 2 - rook, 2 - bishop, 2 - knight, 8 - pawn))

    10430 번을 풀며 알게된 map 을 응용했고, 

    분명 python으로 실행했을 때는 올바르게 답이 나오는데 

    백준 채점에서는 "틀렸습니다!!!" 가 나와서 황당.

     

    if문이 굳이 필요없는가 싶어 if문을 빼고 재도전 해봤다.

     

    2차 try. 

    king, queen, rook, bishop, knight, pawn = map(int, input().split())
    print((1 - king, 1 - queen, 2 - rook, 2 - bishop, 2 - knight, 8 - pawn))

    틀렸습니다 !!!

     

    print에 값을 하나하나 입력하는 건 좋지 않다는 조언이 떠올라서 

    각각의 값을 변수에 넣고, print는 변수로만 실행해 보았다. 

     

    3차 try.

    king, queen, rook, bishop, knight, pawn = map(int, input().split())
    a = 1 - king
    b = 1 - queen
    c = 2 - rook
    d = 2 - bishop
    e = 2 - knight
    f = 8 - pawn
    print(a, b, c, d, e, f)

    정답 ~ 

    올바른 피스 값에서 입력값을 뺄셈으로 입력해 주었는데, 

    그 이유는 문제에서 '음수라면 제거해야 하는 것이다'라고 했기 때문이다.  

    올바른 세트보다 입력값이 더 많다면 제거해야 하기 때문에 +가 아닌 - 를 해 주었다.

     

    if문을 제거해도 괜찮겠다고 판단했던 이유는 

    아무래도 체스 피스가 엄청나게 많을 리가 없으니까...? (근거 없음)

    입력값 범위를 지정하는 경우와 안 해도 되는 경우를 알아봐야겠다. ..

    댓글