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