[코딩 테스트] 4일차.

Hayoon·2022년 7월 6일
0

곳감(모래시계)

현수는 곳감을 만들기 위해 감을 깍아 마당에 말리고 있습니다. 현수의 마당은 NXN 격자판으 로 이루어져 있으며, 현수는 각 격자단위로 말리는 감의 수를 정합니다.
그런데 해의 위치에 따라 특정위치의 감은 잘 마르지 않습니다. 그래서 현수는 격자의 행을 기준으로 왼쪽, 또는 오른쪽으로 회전시켜 위치를 변경해 모든 감이 잘 마르게 합니다.
만약 회전명령 정보가 2 0 3이면 2번째 행을 왼쪽으로 3만큼 아래 그림처럼 회전시키는 명령 입니다.

문제의 요지는 좌측 또는 우측으로 리스트를 x만큼 이동시켜야한다.
인덱스 값을 자유자재로 변경시키고 싶어 popleft(), appendleft()로 사용하기로 했다.
문제는 list형일 경우 dequeue와 호환이 되지 않았다. 핵심은 duqueue를 list()로 감싸 list형으로 변환시키는 것이었다.

from collections import deque
N = int(input())

# for i in range(N):
#     gam.append(list(map(int, input().split())))
gam = [list(map(int, input().split())) for _ in range(N)]
# 위와 같이 한 줄로 나타낼 수 있음

M = int(input())
for i in range(M):
    cmd = list(map(int, input().split()))
    # cmd-> 행, 왼/오, x만큼 이동
    sub_gam = deque(gam[cmd[0] - 1])
    if cmd[1] == 0: #LEFT
        for j in range(cmd[2]):
            sub_gam.append(sub_gam.popleft())
        gam[cmd[0] - 1] = list(sub_gam)
    elif cmd[1] == 1: #RIGHT
        for j in range(cmd[2]):
            sub_gam.appendleft(sub_gam.pop())
        gam[cmd[0] - 1] = list(sub_gam)
total_gam = 0
for i in range(N//2):
    total_gam += sum(gam[i][0 + i:N - i])
    total_gam += sum(gam[N - 1 - i][0 + i:N - i])
total_gam += gam[N//2][N//2]
print(total_gam)
'''
5
10 13 10 12 15
12 39 30 23 11
11 25 50 53 15
19 27 29 37 27
19 13 30 13 19
3
2 0 3
5 1 2
3 1 4
'''

sub_gam을 pop, popleft()하고 바로 append(left일 경우), appendleft(right일 경우)로 간결하게 리스트 값을 변경할 수 있었다. 최종적으로, gam = list(sub_gam)으로 리스트에 삽입!

for i in range(N):
	for j in range(s, e + 1):
    	result += gam[i][j]
    if i < N//2:
    	s += 1
        e -= 1
    else:
    	s -= 1
        e += 1
print(result)

NXN 크기의 맵을 모래시계 모양의 값만 더하고 싶을 경우 위의 코드와 같이 간단하게 할 수 있었다.
나는 Top, Bottom, mid로 총 3개로 나누어서 했었는데 위의 코드가 더 간결했다.

어렵다.

파이썬 알고리즘 문제풀이 (코딩테스트 대비) https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8/lecture/27683

profile
Junior Developer

0개의 댓글