2023 현대모비스 대비 기출 모의 코딩테스트
초고
일시: 2023년 6월 28일 14:00~17:00
문제: 2022년 현대모비스 알고리즘 경진대회 예선
사용 언어: Python3
결과: 2 정답 / 5 문제
2023년 현대모비스 알고리즘 경진대회에 학생부로 참가 신청을 했다. 6월 30일에 진행되는 예선에 대비하고자 오늘 크래프톤 정글 동료들과 모의 코딩테스트를 진행했다. 구름LEVEL 플랫폼에 올라온 22년도 예선 기출 문제를 오후 2시부터 5시까지 3시간 동안 테스트를 봤다. 22년도 대회 플랫폼이 구름IDE 였어서 똑같은 테스트 환경에서 진행할 수 있었다.
1. Dead or Arrive
# -*- coding: utf-8 -*-
# UTF-8 encoding when using korean
import sys
input = sys.stdin.readline
n = int(input())
cars = []
for i in range(n):
temp = list(map(int, input().split()))
cars.append(temp + [i+1])
lst = [[0, 0]] * 1000
for i in range(n):
v = cars[i][0]-1
w = cars[i][1]
idx = cars[i][2]
if lst[v][0] == 0:
lst[v] = cars[i][1:]
elif lst[v][0] == w:
lst[v][1] = idx
elif lst[v][0] < w:
lst[v] = [w, idx]
answer = 0
for i in range(1000):
answer += lst[i][1]
print(answer)
- 구름LEVEL 난이도 2
- 문제를 잘 읽어야 하는데, "충돌하지 않은 모든 차량이" 결승점에 들어올 수 있다. 꼴등도 들어올 수 있다!
- 단순 정렬 문제이지만, 정렬을 사용하면 몇 개의 테스트케이스가 Timeout된다.
- 차량 속도를 인자로 갖는 배열을 만들고, 반복문을 돌면서 더 높은 내구도를 가진 차량으로 갱신시킨다.
- 배열에 남아있는 차량의 번호를 합한다.
3. ADAS 시스템
# -*- coding: utf-8 -*-
# UTF-8 encoding when using korean
from heapq import heappush, heappop
import sys
input = sys.stdin.readline
mx = [-1, -1, -1, 0, 0, 1, 1, 1]
my = [-1, 0, 1, -1, 1, -1, 0, 1]
def calculate(c):
if c == s:
return 0;
p, cy, cx = c
result = 0
if p == 1:
result = -3
for i in range(8):
nx = cx + mx[i]
ny = cy + my[i]
if 0 <= nx < h and 0 <= ny < w:
if maps[ny][nx] == 'P':
result += 1
return result
w, h = map(int, input().split())
ps = []
maps = [[0]] * w
for i in range(w):
temp = input().strip()
if 'S' in temp:
j = temp.index('S')
s = (2, i, j)
if 'E' in temp:
j = temp.index('E')
e = (i, j)
maps[i] = temp
visited = [[False] * h for __ in range(w)]
dy = [-1, 0, 0, 1]
dx = [0, -1, 1, 0]
queue = []
heappush(queue, s)
visited[s[1]][s[2]] = True
score = 0
while queue:
c = heappop(queue)
__, cy, cx = c
if (cy, cx) == e:
break
score += calculate(c)
for d in range(4):
nx = cx + dx[d]
ny = cy + dy[d]
if 0 <= nx < h and 0 <= ny < w:
if not visited[ny][nx]:
if maps[ny][nx] == 'E':
heappush(queue, (0, ny, nx))
elif maps[ny][nx] == 'P':
heappush(queue, (1, ny, nx))
else:
heappush(queue, (2, ny, nx))
visited[ny][nx] = True
print(max(score, 0))
- 구름LEVEL 난이도 3
- 우선순위 큐 문제
- 문제에서 명시적으로 "우선순위"를 부여해준 대로, 우선순위 순서대로 탐색을 돌아야 한다.
- 지문이 난해하지만, 결국 주변을 탐색하고 우선순위 순서대로 다음 탐색지를 찾고 위험 점수를 갱신하면 된다.
- 출력값이 음수가 되면 안 되므로, 마지막에 잊지 말고 처리해주어야 한다.
모의 코딩테스트 후기
사실 작년에도 신청했었지만 바쁜 일정이랑 겹치는 바람에 그냥 안 했다. 막상 해보니 어차피 광탈이었을 것 같다. 경진대회인 만큼 문제 수준이 쉽지는 않다. 굳이 따지지면 "문제의 난이도"보다는 "지문" 자체가 어려웠다. 백준에서 400자 이내로 출제될 문제를 700자로 늘려놔서 지문이 굉장히 읽기가 힘들다. 이건 사기업 코딩테스트의 특징인데, 회사를 문제 속에 녹여서 문제를 내다보니 지문이 난해하고 길어진다.
또, 시간 제한과 메모리 제한에 대한 언급이 없다. 현대모비스 알고리즘 경진대회 후기글에서 자주 보이는데 여러모로 빡빡하게 보는 것 같다. 실제로 1번 문제를 정렬을 사용해서 풀면 테케 22개 중에서 4개가 Timeout나지만, 배열을 사용해서 풀면 100점을 받는다. 쉽게 풀 수 있다고 해서 바로 제출하지 말고, 시간복잡도나 공간복잡도를 더 줄일 수 있는지를 항상 염두해야 할 것 같다.
모의 테스트에서도 2개 밖에 못 풀어서 예선도 통과하지 못할 것 같다. 알고리즘에 대한 감을 놓지 않기 위해 하는 거니까 큰 욕심을 내지 말고 해봐야겠다. 그래도 하는 이상 최선을 다해야지.