회전 방어
문제
한 명의 주인공 캐릭터가 존재한다. 주인공 캐릭터는 처음에 위쪽(상)을 바라보고 있다. 이후에 1초부터 N초에 걸쳐서 매 초마다 상, 하, 좌, 우 위치에 적이 나타난다. 주인공 캐릭터는 매 초마다 방향을 바꾸지 않거나(가만히 있기), 좌로 90도 회전(좌회전), 우로 90도 회전(우회전)할 수 있다. 주인공 캐릭터의 위치는 고정되어 위치를 옮기는 것은 불가능하다.
매 초마다 ① 먼저 캐릭터가 회전 방향을 결정한 뒤에 ② 상, 하, 좌, 우 위치에서 적군이 한 칸씩 다가와 공격을 수행한다.
적군으로부터 공격을 받은 주인공 캐릭터의 점수는 적군의 공격력에 따라 차감된다. 구체적으로 캐릭터의 앞(정면)에 존재하는 적은 공격력의 1배수만큼, 옆에 존재하는 적은 공격력의 2배수만큼, 뒤(후면)에 존재하는 적은 공격력의 3배수만큼 점수가 차감된다.
앞서 언급했듯이 총 N초에 걸쳐서 매 초마다 상, 하, 좌, 우 위치에 각각 적군이 1명씩 등장한다. 따라서 입력은 4×N 크기의 2차원 배열로 주어지며, 이 배열은 총 N초에 걸쳐서 등장하는 각 적군들의 공격력 정보를 포함한다. 이때 각 행의 의미를 주인공의 위치를 중심으로 살펴 보면, 첫 번째 행은 위쪽(상), 두 번째 행은 오른쪽(우), 세 번째 행은 아래쪽(하), 네 번째 행은 왼쪽(좌) 위치를 의미한다.
캐릭터가 N초간 적절하게 행동하도록 하여 최소한의 데미지를 받도록 하는(최소한의 점수가 차감되도록 하는) 프로그램을 작성하여라. 예를 들어 N=4이고, 다음과 같이 적군의 공격력이 주어진다고 가정하자.
| 시간 | 1초 | 2초 | 3초 | 4초 |
|---|---|---|---|---|
| 상 | 2 | 2 | 3 | 7 |
| 우 | 1 | 3 | 8 | 6 |
| 하 | 3 | 5 | 6 | 5 |
| 좌 | 4 | 4 | 9 | 3 |
만약 주인공 캐릭터가 다음과 같이 (1) 가만히, (2) 좌회전, (3) 우회전, (4) 우회전 순서대로 행동한다면, 총 (21 + 27 + 55 + 39) = 142점이 감점된다.
| 시간 | 1초 | 2초 | 3초 | 4초 |
|---|---|---|---|---|
| 행동 | 가만히 | 좌회전 | 우회전 | 우회전 |
| 현재 보는 곳 | 상 | 좌 | 상 | 우 |
| 차감되는 점수 | 21 | 27 | 55 | 39 |
하지만 주인공 캐릭터가 다음과 같이 (1) 좌회전, (2) 좌회전, (3) 가만히, (4) 좌회전 순서대로 행동한다면, 총 (17 + 25 + 49 + 39) = 130점이 감점된다. 이 점수는 주인공이 최선의 행동을 했을 때 차감되는 점수 합으로, 최솟값이다.
| 시간 | 1초 | 2초 | 3초 | 4초 |
|---|---|---|---|---|
| 행동 | 좌회전 | 좌회전 | 가만히 | 좌회전 |
| 현재 보는 곳 | 좌 | 하 | 하 | 우 |
| 차감되는 점수 | 17 | 25 | 49 | 39 |
주인공이 N초 동안 최선의 행동을 함으로써 만들 수 있는, 차감되는 점수의 합의 최솟값을 반환하는 프로그램을 작성하여라.
입출력 예시
예시 1
입력
4, [[2, 2, 3, 7], [1, 3, 8, 6], [3, 5, 6, 5], [4, 4, 9, 3]]
출력
130
예시 2
입력
4, [[1, 2, 3, 4], [6, 2, 5, 3], [4, 7, 1, 2], [8, 6, 3, 2]]
출력
107
입력 조건
가장 먼저 적군이 등장하는 횟수(시간) N이 자연수로 주어진다. N은 2 이상 9 이하의 자연수다.
이어서 4×N 크기의 2차원 배열 enemies가 주어지며, 이 배열은 총 N초에 걸쳐서 등장하는 각 적군들의 공격력 정보를 포함한다. 모든 적군의 공격력의 값은 1 이상 100 이하의 자연수다.
출력 조건
주인공이 N초 동안 최선의 행동을 함으로써 만들 수 있는 차감되는 점수의 합의 최솟값을 자연수 형태로 반환한다.
요구사항
- solution(N, enemies) 함수를 만들고 답을 반환해야 합니다
- 쓸 수 있는 말은 파이썬, 자바스크립트입니다
- 메모리 제한은 256MB입니다. 브라우저에서는 재지 않고 적기만 합니다
- 시간 제한은 출제자의 정답 코드를 같은 런타임에서 재서 정합니다
- 이 문제는 프롬프트가 아니라 코드를 냅니다. 그 코드는 이 기기의 브라우저에서 돌고, 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다. 실행 시간은 각자 기기가 적어 보내는 값이라, 코드와 기기 정보를 순위표에 같이 내걸어 둡니다.
- 출력이 글자 하나까지 기대값과 같아야 합니다. 줄 안의 빈칸은 다른 글자와 똑같이 봅니다.
- 케이스는 15개이고, 그 가운데 5개는 입력과 기대 출력을 함께 보여 줍니다. 나머지는 제출할 때만 쓰이고 화면에는 보여 주지 않습니다.
- 케이스 15개를 전부 통과해야 해결입니다.
예시
공개 케이스 5개입니다. 채점에는 숨은 케이스가 함께 쓰입니다. 케이스 15개를 전부 통과해야 해결입니다.
4, [[2, 2, 3, 7], [1, 3, 8, 6], [3, 5, 6, 5], [4, 4, 9, 3]]
130
4, [[1, 2, 3, 4], [6, 2, 5, 3], [4, 7, 1, 2], [8, 6, 3, 2]]
107
8, [[64, 10, 61, 28, 28, 98, 37, 60], [33, 15, 47, 79, 49, 44, 80, 10], [68, 12, 46, 6, 4, 18, 67, 67], [74, 67, 83, 90, 85, 53, 74, 15]]
2864
7, [[4, 97, 70, 59, 72, 32, 27], [56, 49, 50, 37, 84, 85, 30], [73, 28, 40, 83, 72, 34, 43], [35, 42, 75, 48, 5, 71, 1]]
2543
2, [[42, 44], [91, 42], [67, 36], [33, 41]]
726
참고 사항
풀이에 도움이 되는 배경입니다. 지켜야 하는 규격은 위의 입출력 조건과 요구사항에 있습니다.
원본에서 모의고사 6회 3번입니다.
풀이
코드는 이 기기에서돕니다. 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다.
제출은 로그인 하셔야 됩니다. 공개 케이스로 돌려보는 것은 로그인 없이도 됩니다.
공개 케이스 5개로 돌려보기가 됩니다. 제출하면 숨은 케이스까지 돕니다.
이 문제를 푼 사람
아직 없습니다. 첫 번째가 되실 수 있습니다.