coding test - python/기본기 문제

문제 / 모래시계 / Python 파이썬

sillon 2022. 5. 20. 00:48
728x90
반응형

 

문제 제목: 모래시계

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


나의 풀이

n = int(input())
arr = [list(map(int, input().split())) for _ in range(n)]

m = int(input())
arr_m = [list(map(int, input().split())) for _ in range(m)]

for i in range(m):
    h = arr_m[i][0] - 1 # 행
    v = arr_m[i][1] # 왼쪽은 0, 오른쪽은 1
    p = arr_m[i][2] # 넘겨줄 갯수
    if v == 0: # 왼쪽
        for _ in range(p):
            arr[h].append(arr[h].pop(0))
    elif v == 1:
        for _ in range(p):
            arr[h].insert(0,arr[h].pop())

# for i in range(n): # 값이 이동된 배열 확인
#     print(arr[i])

res = 0
s = 0
e = n - 1

for i in range(n):
    for j in range(s,e+1):
        res += arr[i][j]
    if i < n // 2:
        s +=1
        e -=1
    else:
        s -= 1
        e += 1
print(res)

문제를 잘 이해하고 옮겨주는 것이 중요하다.

 

만약 왼쪽으로 옮겨야 하는 경우에는 제일 앞의 값을 제일 뒤에 추가하고, 제일 앞의 값을 pop(0) 해야 왼쪽으로 돌아간다.

오른쪽으로 옮겨야 하는 경우에는 제일 뒤의 값을 앞으로 추가 하고 제일 뒤의 값을 pop() 해야 오른쪽으로 돌아간다.

모범답안

import sys
sys.stdin = open("input.txt", 'r')
n=int(input())
a=[list(map(int, input().split())) for _ in range(n)]
m=int(input())
for i in range(m):
    h, t, k=map(int, input().split())
    if(t==0):
        for _ in range(k):
            a[h-1].append(a[h-1].pop(0))
    else:
        for _ in range(k):
            a[h-1].insert(0, a[h-1].pop())

res=0
s=0
e=n-1
for i in range(n):
    for j in range(s, e+1):
        res+=a[i][j]
    if i<n//2:
        s+=1
        e-=1
    else:
        s-=1
        e+=1
print(res)

 

코드 변수만 다르고 정답이랑 똑같아서 좀 놀랐음! ㅋ


※ 알아야 할 것

- pop() : 리스트의 제일 뒤의 값을 지운다.

- arr.append(arr.pop(0)) # 제일 앞에 있는 값을 pop하고, 그 값을 제일 뒤로 추가한다. 

- arr.insert(0,arr.pop()) # 제일 뒤에 있는 값을 pop하고, 그 값을 제일 앞으로 추가한다.

 

728x90
반응형