1. 서류

지원서 작성을 해야합니다.
질문1. 본인이 최고라고 생각하거나 다른 사람보다 뛰어나다고 생각하는 항목과, 이를 성취하기 위한 노력과 과정에 대해 작성해 주십시오. (필수) * 800자

질문2. 해결하기 어려웠던 문제나 상황에서 남들이 하지 않은 새로운 시도/변화를 통해 기회를 창출하거나 문제를 해결한 경험에 대해 서술해 주십시오. (필수) * 800자

질문3. 지원 직무에 필요한 역량과 관련된 프로젝트/공모전/논문/연구/학습 및 기타 활동에 참여한 경험 1을 작성하여 주십시오. (필수) * 500자

질문4. 지원 직무에 필요한 역량과 관련된 프로젝트/공모전/논문/연구/학습 및 기타 활동에 참여한 경험 2을 작성하여 주십시오. (선택) * 500자

질문 1 ~ 3 필수항목 까지만 작성해서 제출하였습니다.

2. 안내 메일

보시다시피 외부 IDE는 사용가능하나 복사,붙여넣기가 안되어 직접 코드를 작성해야 합니다.(프로그래머스 내에서는 가능)

또한 검색이 가능하지만 권장하지 않는다고 명시되어 있으나 시험 내에서는 기억상 브라우저 등에 검색하면 안된다고 되어있었습니다.

시험 창 내부에 다음과 같이 documentation 링크가 있는데 documentation 내에서만 검색 가능하도록 시험을 치뤘습니다.

https://devdocs.programmers.co.kr/python~3.8/

[DevDocs — Python 3.8 documentation

devdocs.programmers.co.kr](https://devdocs.programmers.co.kr/python~3.8/)

3. 테스트 입장 전

4월 15일 (금)인 코딩테스트 전날에 데모테스트 사전체험을 하였습니다.

기본적으로 제공 동의 등 항목체크하고 노트북 화면 공유, 노트북 캠 연결, 신분증 촬영 후 제출, 핸드폰 카메라 연결 등의 사전작업을 미리 체험해보게 됩니다. (테스트 당일날도 다시 똑같이 진행해야 됨)

또한 듀얼모니터 사용이 안되어 노트북화면 1대로만 시험을 치뤘습니다. ★

그리고 촬영 중에 다른 외부인이 비춰지면 안되고 독립된 공간에서 치뤄야 한다는 조항도 있어서 집에서 치뤘습니다.

4. 본 테스트

3시간 동안 4문제를 풀도록 출제됩니다.

 

문제1 유형 : DFS 방식으로 풀었습니다.

 

문제2 유형 : 트리 + DP

root에서 시작해서 dfs 를 활용한다.

dfs(x)

: x를 root로 하는 rooted tree에서 x의 모든 자식들의 값 계산해주는 함수

이렇게 함수 정의를 잘해주면 dfs에서 바로 계산이 가능하다.

많이 나오는 예시이므로 암기할 것 ★

트리 + DP 의 가장 쉬운 버전이라고 생각하시면 됩니다. ★

함수의 역할 자체를 잘 정의해주면 이걸 호출하는 것 만으로도 자식들의 결과를 자신의 결과에 쓸 수 있기 때문에 작은 문제의 결과로 큰 문제의 값을 빠르게 계산할 수 있죠.

 

문제3 유형 : DP

 

문제4 유형 : 단순 구현

5. 소감

트리와 DP 유형의 문제를 평소 풀지 않았던 터라 생각하는 로직은 맞았으나 코드로 구현하기 어려웠습니다.

그래서 문제1과 문제4만 풀어서 제출했으며 문제2와 문제3은 풀지못하였습니다.

또한 IDE에서 프로그래머스로 옮기는 과정에서 오타가 생겨 테스트 케이스를 돌릴 때 에러가 계속 발생했는데 에러 발생 여부만 알려주고 어느 줄에 발생했는지도 안알려줘서 해결하는데 시간낭비를 좀 많이 하였습니다.(※ 주의)

어느정도 연습했던 분이라면 3솔까지는 무난하게 하시지 않았을까 하는 생각이 듭니다.

6. 코드

# Q1.
# C3
# => 52
import sys
si = sys.stdin.readline
n = int(si())
a = [[0 for _ in range(10)] for __ in range(10)]
for _ in range(n):
    coord = si().strip()  # 병사의 좌표, D7 => 4행 7열
    row = ord(coord[0]) - ord('A') + 1
    col = int(coord[1])
    dirs = [[-1, -1], [1, -1]]
    for dr, dc in dirs:
        for len in range(-7, 8):
            nr = row + dr * len
            nc = col + dc * len
            if 1 <= nr <= 8 and 1 <= nc <= 8:
                a[nr][nc] = 1

ans = 0
for i in range(1, 9):
    for j in range(1, 9):
        if a[i][j] == 0:
            ans += 1

print(ans)


# Q2.
# 6 121
# 1 2
# 1 3
# 3 4
# 3 6
# 3 5
import sys
si = sys.stdin.readline
n, k = map(int, si().split())
children = [[] for _ in range(n + 1)]
hasParent = [0 for _ in range(n + 1)]
for _ in range(n - 1):
    par, child = map(int, si().split())
    children[par].append(child)
    hasParent[child] = 1
value = [0 for _ in range(n + 1)]
def DFS(x):
    # x의 모든 자식들에 대해 value 계산해주기
    if not children[x]:  # x 밖에 없는 상황
        value[x] = 1
        return
    for child in children[x]:
        DFS(child)
        value[x] += value[child]
for i in range(1, n + 1):
    if not hasParent[i]:
        DFS(i)
total_value_sum = sum(value)
multiply = k // total_value_sum
for i in range(1, n + 1):
    print(value[i] * multiply, end=' ')


# Q3.
# 4 4
# 2 1 2 1 3 4 4 3
# 1 2 3 4
# => 4
import sys
INF = 1000000009
si = sys.stdin.readline
n, m = map(int, si().split())
a = list(map(int, si().split()))
smells = list(map(int, si().split()))
# 각 향기마다 A랑 B위치 기억해두기
place = [[-1, -1] for _ in range(n + 1)]
for i in range(n * 2):
    smell = a[i]
    if place[smell][0] == -1:
        place[smell][0] = i
    else:
        place[smell][1] = i


def get_dist(x, y):
    # x번 위치에서 y번 위치로 가는 최단거리 계산
    if x > y:
        x, y = y, x
    return min(y - x, n * 2 - (y - x))
# 배열 정의
dy = [[INF, INF] for _ in range(m + 1)]
dy[0][0], dy[0][1] = get_dist(0, place[smells[0]][0]), get_dist(0, place[smells[0]][1])
for i in range(1, m):
    prev = smells[i - 1]  # 직전에 맡은 향 번호
    cur = smells[i]       # 이번에 맡은 향 번호
    for cur_k in range(2):
        # dy[i][cur_k] 을 계산해줄 차례
        curPosition = place[cur][cur_k]
        prevA, prevB = place[prev][0], place[prev][1]
        dy[i][cur_k] = min(dy[i - 1][0] + get_dist(prevA, curPosition),  # 직전에 A번 위치 선택
                           dy[i - 1][1] + get_dist(prevB, curPosition))  # 직전에 B번 위치 선택
print(min(dy[m - 1]))


# Q4.
import sys
si = sys.stdin.readline
n = int(si())
a = [0] + list(map(int, si().split()))
b = [0 for _ in range(n + 1)]
for i in range(1, n + 1):
    for j in range(i, n + 1, i):
        b[j] += a[i]

for i in range(1, n + 1):
    print(b[i], end=' ')

+ Recent posts