반응형
문제설명
현수는 곳감을 만들기 위해 감을 깎아 마당에 말리고 있다. 현수의 마당은 N by N 격자판으로 이루어져 있으며, 현수는 각 격자단위로 말리는 감의 수를 정한다. 그런데 해의 위치에 따라 특정 위치의 감은 잘 마르지 않는다. 그래서 현수는 격자의 행을 기준으로 왼쪽, 또는 오른쪽으로 회전시켜 위치를 변경해 모든 감이 잘 마르게 한다. 만약 회전명령 정보가 2, 0, 3 이면 2번째 행을 왼쪽(0)으로 3만큼 아래 그림처럼 회전시키는 명령이다.
첫 번째 수는 행번호, 두 번째 수는 방향인데, 0이면 왼쪽, 1은 오른쪽이고, 세 번째 수는 회전하는 격자의 수이다. M개의 회전명령을 실행하고 난 후 아래와 같이 마당의 모래시계 모양의 영역에는 감이 총 몇개가 있는지 출력하는 프로그램을 작성해라.
입력조건
- 첫 줄에 자연수 N(3 <= N <= 20)이 주어지며, N은 홀수이다.
- 두번째 줄에부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어진다.
- 이 자연수는 각 격자안에 있는 감의 개수이며, 각 격자안의 감의 개수는 100을 넘지 않는다.
- 그 다음 줄에 회전명령의 개수인 M(1 <= M <= 10)이 주어지고, 그 다음 줄부터 M개의 회전명령 정보가 M줄에 걸쳐 주어진다.
출력조건
- 총 감의 개수를 출력한다.
사고과정
- 왼쪽, 오른쪽 입력 방향 정보에 따라 칸 수를 이동시켜야 한다. 이 때 나누기 % 연산을 활용해서 move라는 함수를 따로 구현했다. 그리고 모래시계 영역은 저번에 못 푼 사과나무 문제를 교훈삼아 해결할 수 있었다. 시작, 끝 인덱스를 설정해서 행이 늘어남에 따라 인덱스를 더해주거나 빼주었다.
- 강의 풀이를 보니 왼쪽, 오른쪽으로 칸을 이동하는 것을 리스트 내장함수의 pop과 append, insert를 사용했다. 해당 함수를 사용할 것이라고는 생각 못했다. 입력 데이터 범위가 적으니 사용해도 괜찮은 것 같다!
풀이
- 나의 풀이
def move(row, direction, k):
new_row = [0] * n
# 왼쪽
if direction == 0:
for i in range(n):
if (i-k) < 0:
new_row[(i-k) % n] = row[i]
else:
new_row[i-k] = row[i]
# 오른쪽
else:
for i in range(n):
if (i+k) >= n:
new_row[(i+k) % n] = row[i]
else:
new_row[i+k] = row[i]
return new_row
n = int(input())
arr = [list(map(int, input().split())) for _ in range(n)]
m = int(input())
for _ in range(m):
row, direction, k = map(int, input().split())
arr[row-1] = move(arr[row-1], direction, k)
res = 0
s, e = 0, 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)
- 강의 풀이
# 강의 Solution -> list의 내장함수 pop, insert(idx, value)을 사용한 풀이
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, e = 0, 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)
반응형
'알고리즘 삽질장' 카테고리의 다른 글
[인프런] 스도쿠 검사 (0) | 2021.11.12 |
---|---|
[인프런] 봉우리 (0) | 2021.11.12 |
[인프런] 사과나무(다이아몬드) (0) | 2021.11.12 |
[BOJ] 1748번 - 수 이어 쓰기 1 (0) | 2021.11.05 |
[BOJ] 6064번 - 카잉 달력 (0) | 2021.11.05 |