알고리즘/코드트리

[코드트리 조별과제] 2주차 학습 후기

SangJunni 2024. 7. 24. 00:03

저번 주에 시작한 코드트리 조별과제 2주차 학습 후기를 작성한다.
이번에도 학습 리뷰는 기업 유형에 대해 학습하고 해당 내용을 정리한다.
저번 주차 학습에 이어서 해결한 삼성 문제 유형은 다음과 같다. 

이동경로상에 있는 모든 숫자 더하기

소요 시간 46분?


문제

크기의 정사각형 모양의 격자 정보가 주어졌을 때, 가운데 위치에서 북쪽을 향한 상태로 움직이는 것을 시작하려 합니다. 개의 명령에 따라 움직이며, 명령어는 로 주어집니다. 명령 은 왼쪽으로 90도 방향 전환을, 명령 은 오른쪽으로 90도 방향 전환을, 명령 가 주어지면 바라보고 있는 방향으로 한칸 이동하게 됩니다. 시작 위치를 포함하여 위치를 이동하게 될 때마다 해당 칸에 적혀있는 수를 계속 더한다고 헀을 때, 이들의 총합을 구하는 프로그램을 구하는 프로그램을 작성해보세요. 단, 격자의 범위를 벗어나게 하는 명령어는 무시해야함에 유의합니다.

입력

  • 첫 번째 줄에 정수  가 공백을 사이에 두고 주어집니다.
    두 번째 줄에 문자 , , 그리고 로만 이루어진 문자열이 하나 주어집니다.
    세 번째 줄부터 개의 줄에 걸쳐 각 행에 해당하는 n개의 수들이 공백을 사이에 두고 주어집니다.
    • 3 ≤  ≤ 99 (단, 은 홀수)
    • 1 ≤  ≤ 100,000
    • 1 ≤ 격자 안의 수 ≤ 9

풀이

n, t = map(int, input().split())
operations = input()
field = [list(map(int, input().split())) for _ in range(n)]
x,y = n//2,n//2
way, score = 0, field[x][y]
# 북, 동, 남, 서
directions = [(-1,0),(0,1),(1,0),(0,-1)]
for op in operations:
    if op == 'L':
        way = (way-1)%4
        continue
    elif op == 'R':
        way = (way+1)%4
        continue
    nx = x + directions[way][0]
    ny = y + directions[way][1]
    if nx < 0 or nx >=n or ny < 0 or ny >= n:
        continue
    x, y = nx,ny
    score += field[x][y]
print(score)

풀이 방법

저번 주차에 풀었던 문제와 동일하게 삼성 코딩 역량테스트 1번 문제로 나오는 시뮬레이션에서 나오는 방향 전환 및 조건이 주어진 문제이다. 저번 문제와 다른 점은 이동 방향이 명시된 것이 아니라 회전 명령이 있어 명령에 따라 시계 또는 반시계 회전을 진행한다는 점이다. 이렇게 회전 이동을 할 때 쉽게 구현하는 방법은 방향은 다음과 같다.
 1. 시계 방향의 경우 인덱스를 1 증가
 2. 반시계 방향의 경우 인덱스를 1 감소
 3. 인덱스 증감 이후 나머지 연산을 통해 인덱스 변수가 0~3 사이의 값을 가지도록 설정

이동의 경우에는 조건과 같이 범위가 넘어가는지 체크한 다음 이동할 수 있으면 새로 이동한 위치의 점수를 더해주는 방식으로 진행하면 된다.

주차 학습 후기 + Tips

1. 이번 주차는 삼성 유형 기초 문항과 달리 난이도가 올라갔지만 실제 역량 테스트를 보러 갔을 때 마주치는 문제 난이도에 비하면 여전히 낮다는 점에 유의할 것.
2. 방향 전환 테크닉의 경우 한번 익혀두면 삼성 유형에서는 유용하게 사용되니 암기보다는 여러 기출 문제를 풀면서 자연스럽게 익히는 것이 좋다는 것.
3. 코드트리의 예상 시간은 처음 유형을 접하는 경우에 해당하는 것으로 예상. 삼성 기출을 대부분 풀어본 입장으로서 경험이 있다면 5분 정도면 쉽게 풀 수 있는 유형이었음.