코딩테스트

[백준][구현] 이차원 배열과 연산

pythaac 2022. 4. 29. 17:19
BAEKJOON Online Judge(BOJ) 문제입니다.

https://www.acmicpc.net/

 

Baekjoon Online Judge

Baekjoon Online Judge 프로그래밍 문제를 풀고 온라인으로 채점받을 수 있는 곳입니다.

www.acmicpc.net

 

문제

https://www.acmicpc.net/problem/17140

 

17140번: 이차원 배열과 연산

첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다.

www.acmicpc.net

 

내가 작성한 코드

from collections import defaultdict

def read_data():
    r, c, k = map(int, input().rstrip().split())
    A = []
    for _ in range(3):
        A.append(list(map(int, input().rstrip().split())))
    return r-1, c-1, k, A

def R(A, row):
    for r in range(row):
        yield A[r]

def C(A, row, col):
    for c in range(col):
        yield [A[r][c] for r in range(row)]

def sorting(arr):
    counter = defaultdict(int)
    for k in arr:
        counter[k] += 1

    # 정렬
    nw_arr = []
    for k, v in sorted(counter.items(), key= lambda x: (x[1], x[0])):
        if k != 0:
            nw_arr.append(k)
            nw_arr.append(v)

    return nw_arr


def operation(A):
    if len(A) >= len(A[0]):
        gen = R(A, len(A))
    else:
        gen = C(A, len(A), len(A[0]))

    nw_A = []
    mx = 0
    for arr in gen:
        # 정렬 결과
        nw_arr = sorting(arr)
        # 100 초과 내용 자르기
        nw_arr = nw_arr[:100]
        # 최대 길이 구하기
        mx = max(mx, len(nw_arr))
        # nw_A에 추가
        nw_A.append(nw_arr)

    # 0 붙이기
    for arr in nw_A:
        for _ in range(len(arr), mx):
            arr.append(0)

    # C인 경우 A 뒤집기
    if len(A) < len(A[0]):
        real_nw_A = [[] for _ in range(mx)]
        for c in range(len(nw_A)):
            for r in range(mx):
                real_nw_A[r].append(nw_A[c][r])
        nw_A = real_nw_A

    return nw_A

def get_answer(r, c, k, A):
    time = 0
    while time < 101:
        if len(A) > r and len(A[0]) > c and A[r][c] == k:
            return time

        A = operation(A)

        time += 1

    return -1

r, c, k, A = read_data()
print(get_answer(r, c, k, A))
  • 100초 조건
    • 100초까지 포함
    • time < 101

 

다른 사람이 작성한 코드

None
  • 강한 구현문제로 다른 코드를 참고하지 않음

 

기억해야할 것

 

'코딩테스트' 카테고리의 다른 글

[백준][구현] 아기 상어  (0) 2022.04.29
[백준][구현] 미세먼지 안녕!  (0) 2022.04.29
[백준][구현] 연구소 3  (0) 2022.04.29
[백준][구현] 게리멘더링 2  (0) 2022.04.28
[백준][구현] 새로운 게임 2  (0) 2022.04.28