#문제1
6명이 사다리 게임[^1] 을 할 때, 몇 번째 위치에서 시작하는 사람이 상품을 타는지 알고 싶습니다.
가로줄은 항상 인접한 세로줄만 연결할 수 있으며 주어진 순서대로 위에서부터 연결합니다.
예를 들어, 아래 사다리의 가로줄은 [[1, 2], [3, 4], [2, 3], [4, 5], [5, 6]] 으로 표현합니다.
이때 1번째 위치에서 시작한 사람이 상품을 탑니다.
가로줄의 위치가 담긴 2차원 리스트 ladders와 상품의 위치 win이 매개변수로 주어질 때,
당첨자의 시작 위치를 return 하도록 solution 함수를 작성하려 합니다.
빈칸을 채워 전체 코드를 완성해주세요.
---
#####매개변수 설명
가로줄의 위치가 담긴 2차원 리스트 ladders와 상품이 있는 위치 win이 solution 함수의 매개변수로 주어집니다.
* 가로줄의 개수는 1 이상 20 이하인 자연수입니다.
* win은 1 이상 6 이하인 자연수입니다.
* 가로줄은 항상 연결할 수 있는 형태만 주어집니다.
---
#####return 값 설명
승리하는 사람의 시작 위치를 return 합니다.
---
#####예시
| ladders | win | return |
|------------------------------------------| -----|--------|
| [[1, 2], [3, 4], [2, 3], [4, 5], [5, 6]] | | 3 | 1 |
문제:
def solution(ladders, win):
answer = 0
player = [1, 2, 3, 4, 5, 6]
for e in ladders:
temp = player[e[0]-1]
@@@ = @@@
@@@ = temp
answer = player[win-1]
return answer
#아래는 테스트케이스 출력을 해보기 위한 코드입니다.
ladders = [[1, 2], [3, 4], [2, 3], [4, 5], [5, 6]]
win = 3
ret = solution(ladders, win)
#[실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은", ret, "입니다.")
6,7번째 줄 @@@ 부분 두 줄을 수정하면 된다.
풀이 :
Solution 함수의 기능이 무엇인지 보면
Win의 위치를 받아 사다리 연산 후
최종 승리한 사람의 처음 위치를 반환한다.
이 과정에서 사다리 연산을 해주는 코드를 작성하면 된다.
여기서 temp = player[e[0]-1] 이라는 첫 번째 연산 힌트와
마지막 줄에 다시 temp를 어딘가에 대입해주는 힌트가 있다.
이 연산은 서로의 위치를 바꿔주는 연산이다.
정답:
def solution(ladders, win):
answer = 0
player = [1, 2, 3, 4, 5, 6]
for e in ladders:
temp = player[e[0]-1]
player[e[0]-1] = player[e[1]-1]
player[e[1]-1] = temp
answer = player[win-1]
return answer
#아래는 테스트케이스 출력을 해보기 위한 코드입니다.
ladders = [[1, 2], [3, 4], [2, 3], [4, 5], [5, 6]]
win = 3
ret = solution(ladders, win)
#[실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은", ret, "입니다.")
사다리 게임은 획이 하나 그어지면 그 줄의 둘의 위치가 한 번 바뀌기에
player1과 player2의 위치를 이렇게 바꿔주는 연산을 하면 결과가 정상적으로 나오는 것을 볼 수 있다.
이 경우에는 C언어의 문제를 그대로 가져와서인지 파이썬으로 할 때는 간략한 코드는 아니다.
C의 경우에는 player1은 player2의 값으로 대입되어 사라지기 때문에 중간에 값을 저장하는 temp함수를 사용하는 것이다.
파이썬 같은 경우는 한 줄에 동시 선언을 하면 값을 저장했다가 대입해준다.
총 세 줄의 연산을 player1 = player2, player2 = player1과 같이 사용해도 괜찮은 방법이다.
파이썬 모범 답안:
def solution(ladders, win):
answer = 0
player = [1, 2, 3, 4, 5, 6]
for e in ladders:
player[e[0]-1], player[e[1]-1] = player[e[1]-1], player[e[0]-1]
answer = player[win-1]
return answer
#아래는 테스트케이스 출력을 해보기 위한 코드입니다.
ladders = [[1, 2], [3, 4], [2, 3], [4, 5], [5, 6]]
win = 3
ret = solution(ladders, win)
#[실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은", ret, "입니다.")
'파이썬(Python)' 카테고리의 다른 글
[BOJ] 백준 10807번 개수 세기 문제 코드 및 해석 (0) | 2022.12.31 |
---|---|
[파이썬][BOJ] 백준 25304번 영수증 문제 (0) | 2022.12.29 |
[파이썬] 함수와 리스트 (List comprehension 사용방법) (0) | 2022.10.25 |
[파이썬] 함수 (0) | 2022.10.11 |
[파이썬] 구구단 프로그램 예제 (1) | 2022.10.05 |