코테 4

[python] 행렬의 좌/우회전, 전치행렬 간단한 코드

numpy 같은 라이브러리 없이도 행렬의 회전, 전치행렬에 대해서 한 줄로 간단하게 변환시킬 수 있어서 함수로 작성해 여기에 기록해둔다. def rotate(M, dir='left'): if dir == 'left': # left 90 degree rotate out = list(reversed(list(map(list, zip(*M))))) elif dir == 'right': # right 90 degree rotate out = list(map(list, zip(*reversed(M)))) elif dir == 'transpose': # transpose matrix out = list(map(list, zip(*M))) else: print('choose dir "left"/"right"/"tra..

Algorithm/tool 2023.03.17

백준 14503 : 로봇청소기

문제 로봇 청소기와 방의 상태가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 방은 $N \times M$ 크기의 직사각형으로 나타낼 수 있으며, $1 \times 1$ 크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북 중 하나이다. 방의 각 칸은 좌표 $(r, c)$로 나타낼 수 있고, 가장 북쪽 줄의 가장 서쪽 칸의 좌표가 $(0, 0)$, 가장 남쪽 줄의 가장 동쪽 칸의 좌표가 $(N-1, M-1)$이다. 즉, 좌표 $(r, c)$는 북쪽에서 $(r+1)$번째에 있는 줄의 서쪽에서 $(c+1)$번째 칸을 가리킨다. 처음에 빈 칸은 전부 청소되지 않은 상태이다. 로봇 청소기..

[python] 계층적 구조의 다중 필터링

코테 문제를 풀다 효율적인 계층적 구조의 다중 필터링 알고리즘이 필요해서 여기에 기록해둔다. 예를 들어 8명이 각각 A, B, C, D 요소를 갖고 있다고 할 때, 첫 번째 필터로 가장 큰 A요소를 가진 사람을 찾고, 만약 여러 명이면 그 여러 명 중에서 가장 큰 B요소를 가진 사람을 찾고, 여기서도 여러 명이면 가장 작은 C요소를 가진 사람을 찾고 여기서도 여러 명이면 가장 작은 D요소를 가진 사람을 찾는 문제를 "계층적 구조의 다중 필터링" 알고리즘이라 칭했다. 각 필터가 독립적이지 않고 조건부로 얽혀있기 때문이다. 좀 많이 고민했는데, 현재 기준 가장 깔끔한 것 같은 알고리즘 구상은 아래와 같다. 상위 필터에서 단독으로 걸리는 가정은 생략했다. dic = {"A": [5, 5, 5, 5, 3, 5,..

Algorithm/tool 2023.02.08