[구현] 배열돌리기, 짝지어 제거하기
1. 배열돌리기
링크 - https://www.acmicpc.net/problem/17276
import copy
import sys
input = sys.stdin.readline
t = int(input().rstrip())
#시계방향
def rotate_clock(k,arr):
rotate_arr = copy.deepcopy(arr)
for j in range(k):
mid = n//2
for i in range(n):
rotate_arr[i][mid] = arr[i][i]
rotate_arr[i][n-i-1]= arr[i][mid]
rotate_arr[mid][i] = arr[n-i-1][i]
rotate_arr[i][i] = arr[mid][i]
arr=copy.deepcopy(rotate_arr)
return arr
#시계방향
def rotate_counter(k,arr):
rotate_arr = copy.deepcopy(arr)
for j in range(k):
mid = n//2
for i in range(n):
rotate_arr[mid][i] = arr[i][i]
rotate_arr[i][i]= arr[i][mid]
rotate_arr[i][mid] = arr[i][n-i-1]
rotate_arr[n-i-1][i] = arr[mid][i]
arr=copy.deepcopy(rotate_arr)
return arr
for _ in range(t):
n,rotate = map(int,input().rstrip().split())
arr = []
#배열 입력 받기
for i in range(n):
line = list(map(int,input().rstrip().split()))
arr.append(line)
if rotate>0:
k = (rotate//45)
arr = rotate_clock(k,arr)
else:
k = (rotate//-45)
arr = rotate_counter(k,arr)
for i in range(n):
for j in range(n):
print(arr[i][j],end=" ")
문제에 쓰여있는대로 구현을 하면 되는 문제였다. 계속 틀렸습니다가 나왔었는데 k=(rotate//45)%4 에서 그냥 k=(rotate//45)로 바꿔주었더니 해결됐었다.
+) 범위가 0<=d<=360이여서 나눌 필요가 없었고, 나눌거면 4가 아니라 8로 나눴어야 했다.
2. 짝지어 제거하기
def solution(s):
stack=[]
stack.append(s[0])
count=1
for i in range(1,len(s)):
if len(stack)!=0 and stack[-1]==s[i]:
stack.pop()
else:
stack.append(s[i])
if len(stack)==0:
return 1
else:
return 0
그대로 구현을 하려다가 스택을 사용하면 더 편할 거 같아서 스택을 이용하여 풀었다.
+한 문제 더 풀려고 했는데 시간초과가 나서 내일 풀어야겠다..
프로그래머스 - 메뉴 리뉴얼을 풀 때 쓰면 좋은 함수라고 해서 정리
추가 - Counter함수 사용법
from collections import Counter
s="hello"
print(Counter(s).most_common())
#[('l', 2), ('h', 1), ('e', 1), ('o', 1)]
Counter함수를 사용하면 따로 구현할 필요 없이 문자열에 있는 문자의 개수를 세어준다.
Author And Source
이 문제에 관하여([구현] 배열돌리기, 짝지어 제거하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@isg/구현-배열돌리기-짝지어-제거하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)