반응형

1. 문제 : 킹, 퀸, 룩, 비숍, 나이트, 폰 < 3003번 >

 (1) 링크 : https://www.acmicpc.net/problem/3003

 (2) 설명 : 올바른 체스판의 조건이 주어진다.

                 현재 체스판의 상태가 주어질 때, 올바른 체스판이 되기 위한 기물의 변화 개수를 리스트로 출력하시오.

 

2. 풀이 전략

 (1) 예제 해석

   먼저, 첫 번째 예제의 상황입니다.

[1, 1, 2, 2, 2, 8]의 경우가 올바른 체스판인데, 예제 1 체스판의 경우 [0, 1, 2, 2, 2, 7]이 주어졌습니다.

따라서 [0, 1, 2, 2, 2, 7] -> [1, 1, 2, 2, 2, 8] 이 되기 위해서는 맨앞 맨뒤 각각 1개씩의 기물이 더 필요합니다.

 

 그 다음 두 번째 예제의 상황입니다.

마찬가지로 [1, 1, 2, 2, 2, 8]의 경우가 올바른 체스판인데, 예제 2 체스판의 경우 [2, 1, 2, 1, 2, 1]이 주어졌습니다.

따라서 [2, 1, 2, 1, 2, 1] -> [1, 1, 2, 2, 2, 8] 이 되기 위해서는 (맨앞 기물 -1) / (네번째 기물 +1) / (맨뒤 기물 +7)을

해주어야 합니다.

 

즉, "올바른 체스판 리스트에서 주어진 체스판 리스트의 원소 각각을 서로 뺀 리스트가 답이 됩니다."

 

 (2) 도식화

  ① 입력 자료형 선정

   위의 예제에서 봤듯이 리스트의 원소를 서로 빼는 과정이 진행되어야 하므로,

처음 부터 정수형을 원소로 가지는 리스트로 입력받는 것이 좋습니다.

( 정수형 리스트 입력 방법 : https://study-all-night.tistory.com/60 )

 

  ② 알고리즘 (for문 기초 : https://wikidocs.net/22)

   1단계. (올바른 체스판 리스트)와 (주어진 체스판 리스트)에 대해 for문을 이용하여 각각의 원소에 접근한다.

   2단계. for문 이전에 선언한 빈 리스트에, 원소의 차이를 추가한다.

 

  ③ 출력

   리스트를 한줄에 출력한다

 

 (3) 프로그래밍

 

  이제 위 아이디어를 토대로 코드를 짜면 아래와 같이 프로그래밍할 수 있습니다!

# 백준 3003 풀이 1
right = [1, 1, 2, 2, 2, 8] # 올바른 체스판 리스트
temp = list(map(int, input().split())) # 주어진 체스판 리스트 입력

solution = []
for i in range(6) : # 0~5 index 접근
    solution.append(right[i]-temp[i])
    
for i in solution :
    print(i, end = ' ')

  길이는 비슷하지만 "zip 함수"를 이용하면 조금 더 pythonic한 코드를 짤 수 있습니다~

# 백준 3003 풀이 2
right = [1, 1, 2, 2, 2, 8] # 올바른 체스판 리스트
temp = list(map(int, input().split())) # 주어진 체스판 리스트 입력

solution = []
for i, j in zip(right, temp) : # zip 함수 응용
    solution.append(i-j) # 각 원소의 차이 저장
    
for i in solution :
    print(i, end = ' ')

 

반응형