코딩테스트/알고리즘
The Descent
2^7
2022. 9. 2. 10:34
Practice Loops with the exercise "The Descent"
Want to practice coding? Try to solve this easy puzzle "The Descent" (25+ languages supported).
www.codingame.com
반복문으로 가장 높은 산을 파괴하라
목표 : 우주선이 산에 충돌하지 않도록 가장 높은 산부터 차례대로 파괴하세요
규칙
- 산은 총 8개가 있으며 턴을 시작할 때 왼쪽 산부터 차례대로 산의 높이를 알려준다.
- 턴을 종료할 때 마다 8개의 산 중 가장 높은 산에 발포해야한다. 8개의 산은 왼쪽부터 순서대로 0 ~ 7번의 인덱스를 가지며 인덱스를 출력하면 해당 인덱스의 산에 발포해서 산을 파괴한다.
- 턴을 종료하면 앞서 파괴한 산의 높이는 낮아진다. 그리고 우주선의 높이는 조금씩 하강한다.
승리 조건
- 우주선이 산과 충돌하지 않도록 모든 산을 파괴해야한다.(우주선에 가까운 산을 먼저 파괴)
패배 조건
- 우주선이 산과 충돌한다.
- 잘못된 출력 값을 제공한다.
- 제한 시간안에 출력하지 못한다.(1턴의 제한 시간은 100ms이다.)
게임의 입출력 값
- 실행되는 동안 산의 높이를 읽어온 후 발포할 산(가장 높은 산)의 위치를 출력
- 턴 마다 입력 받는 값
- 턴 마다 8줄의 입력 값을 받는다. 각 줄의 입력 값은 산의 높이이며 왼쪽부터 오른쪽까지 순서대로 입력 값을 받는다.(0번 ~ 7번) 게임을 실행하면 화면 하단 콘솔 창에 턴마다 입력 받은 값을 확인 할 수 있다.
- 턴 마다 출력해야 하는 값
- 이번 턴에 발포할 산의 위치를 출력
- 제약 사항
- 산의 높이는 0 ~ 9 사이의 값
- 1턴의 제한 시간은 100ms
풀이
while True:
for i in range(8):
mountain_h = int(input()) # represents the height of one mountain.
# Write an action using print
# To debug: print("Debug messages...", file=sys.stderr, flush=True)
# The index of the mountain to fire on.
print("4")
제공된 코드는 무한 루프에서 턴마다 8개의 입력 값을 받고 1개의 출력 값을 내보내는 구조이다. 턴 마다 입력 받은 값 중 가장 높은 값의 산의 위치를 출력하면 된다. 하지만 현재 코드에서는 항상 4번 인덱스만 출력하도록 되어 있다.
이 문제를 해결하기 위해서는 조건문과 최댓값을 구하는 알고리즘이 필요하다.
가장 큰 값을 구하기 위해 0번 인덱스의 숫자부터 하나씩 가져와 큰 숫자의 인덱스를 남기고 그 다음 인덱스를 가져와 비교한 뒤 큰 값을 나두고 그 다음 인덱스를 비교하는 작업을 반복해서 수행해야 한다.
따라서 문제를 해결하기 위해서는 다음과 같은 과정이 필요하다.
- max_h를 선언하고 0으로 초기화
- while 읽을 데이터가 남아 있는 한 숫자 하나를 읽어 mountain_h에 담는다.
- if mountain_h가 max_h보다 크면 max_h의 값을 mountain_h 값으로 변경한다.
코드
while True:
max_h = 0 #가장 높은 산의 높이를 저장할 변수
max_index = 0 #가장 높은 산의 인덱스를 저장할 변수
for i in range(8): # 턴 마다 8개의 입력 값을 받는다.
mountain_h = int(input())
if mountain_h > max_h: #입력 받은 값이 현재까지의 값보다 크면
max_h = mountain_h #값을 변경한다.
max_index = i
print(max_index)
728x90