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

2022. 5. 20. 00:48·coding test - python/기본기 문제
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
반응형

'coding test - python > 기본기 문제' 카테고리의 다른 글

문제 / 이분 검색 / Python 파이썬  (0) 2022.07.15
문제 / 봉우리 / Python 파이썬  (0) 2022.05.20
문제 / 사과나무(다이아몬드) / Python 파이썬  (0) 2022.05.19
문제 / 격자판 최대합 / Python  (0) 2022.04.05
문제 / *수들의 합/ Python  (0) 2022.04.05
'coding test - python/기본기 문제' 카테고리의 다른 글
  • 문제 / 이분 검색 / Python 파이썬
  • 문제 / 봉우리 / Python 파이썬
  • 문제 / 사과나무(다이아몬드) / Python 파이썬
  • 문제 / 격자판 최대합 / Python
sillon
sillon
꾸준해지려고 합니다..
    반응형
  • sillon
    sillon coding
    sillon
  • 전체
    오늘
    어제
    • menu (614)
      • notice (2)
      • python (68)
        • 자료구조 & 알고리즘 (23)
        • 라이브러리 (19)
        • 기초 (8)
        • 자동화 (14)
        • 보안 (1)
      • coding test - python (301)
        • Programmers (166)
        • 백준 (76)
        • Code Tree (22)
        • 기본기 문제 (37)
      • coding test - C++ (5)
        • Programmers (4)
        • 백준 (1)
        • 기본기문제 (0)
      • 공부정리 (5)
        • 신호처리 시스템 (0)
        • Deep learnig & Machine lear.. (41)
        • Data Science (18)
        • Computer Vision (17)
        • NLP (40)
        • Dacon (2)
        • 모두를 위한 딥러닝 (강의 정리) (4)
        • 모두의 딥러닝 (교재 정리) (9)
        • 통계 (2)
      • HCI (23)
        • Haptics (7)
        • Graphics (11)
        • Arduino (4)
      • Project (21)
        • Web Project (1)
        • App Project (1)
        • Paper Project (1)
        • 캡스톤디자인2 (17)
        • etc (1)
      • OS (10)
        • Ubuntu (9)
        • Rasberry pi (1)
      • App & Web (9)
        • Android (7)
        • javascript (2)
      • C++ (5)
        • 기초 (5)
      • Cloud & SERVER (8)
        • Git (2)
        • Docker (1)
        • DB (4)
      • Paper (7)
        • NLP Paper review (6)
      • 데이터 분석 (0)
        • GIS (0)
      • daily (2)
        • 대학원 준비 (0)
      • 영어공부 (6)
        • job interview (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    소수
    Python
    programmers
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
sillon
문제 / 모래시계 / Python 파이썬
상단으로

티스토리툴바