728x90
https://www.acmicpc.net/problem/17140
💡 문제 풀이
구현 문제이다.
R 연산과 C 연산은 대상만 다를 뿐 똑같은 로직을 가진다.
따라서, 배열의 열과 행을 바꿔줌으로 추가적인 로직 구현을 할 필요가 없다.
연산을 하다 보면 처음 크기보다 작아져서 오류가 뜨는 경우가 있다.
예외처리를 통해서 그런 경우는 넘어가도록 하게 해야 한다.
✔️ 느낀 점
zip() 함수를 사용하면 정말 2차원 배열을 쉽게 뒤집을 수 있다.
이번 문제를 풀면서 생각보다 시간복잡도에 대한 이해가 부족하다는 생각이 들었다.
좀 더 시간복잡도를 생각하면서 문제를 풀어야겠다.
💻 코드
import sys ; input = sys.stdin.readline
from collections import Counter
def rFun():
maxSize = 0
for r in range(len(board)):
s = sorted(Counter(board[r]).most_common(), key=lambda x:(x[1], x[0]))
tmp = []
for num, cnt in s:
if num == 0: continue
tmp.append(num)
tmp.append(cnt)
board[r] = tmp
maxSize = max(maxSize, len(tmp))
for r in range(len(board)):
board[r] += [0 for _ in range(maxSize - len(board[r]))]
board[r] = board[r][:100]
def cFun():
global board
board = list(zip(*board))
rFun()
board = list(zip(*board))
r, c, k = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(3)]
for i in range(101):
try:
if board[r-1][c-1] == k:
print(i)
break
except: pass
if len(board) >= len(board[0]): rFun()
else: cFun()
else: print(-1)
'문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[Python] 백준 3079번 : 입국심사 (0) | 2023.04.27 |
---|---|
[Java] 백준 19637번 : IF문 좀 대신 써줘 (0) | 2023.04.26 |
[Python] 백준 16234번 : 인구 이동 (0) | 2023.03.06 |
[Python] 백준 1005번 : ACM Craft (0) | 2023.03.03 |
[Python] 백준 14499번 : 주사위 굴리기 (0) | 2023.03.02 |
댓글