Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 17140. ์ด์ฐจ์› ๋ฐฐ์—ด๊ณผ ์—ฐ์‚ฐ

deo2kim 2020. 11. 30. 12:17
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

  • G4 | ์‹œ๋ฎฌ๋ ˆ์ด์…˜, ๊ตฌํ˜„

๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ ธ๋‹ค.

  • k๊ฐ’์ด ๋งž๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์•„๋‹ˆ๋ผ๋ฉด ์‹œ๊ฐ„์„ +1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
  • R์—ฐ์‚ฐ์ธ์ง€ C์—ฐ์‚ฐ์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
  • R ์—ฐ์‚ฐ์ผ ๊ฒฝ์šฐ
    • ๊ฐ ํ–‰์˜ ์ˆซ์ž์™€ ํ•ด๋‹น ์ˆซ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฆฌ์ŠคํŠธ๋‚˜ ํŠœํ”Œ ํ˜•ํƒœ๋กœ ์ €์žฅํ•œ๋‹ค. [(1, 1), (2, 1)] ์ด๋Ÿฐ์‹์œผ๋กœ
    • sort๋ฅผ ์ด์šฉํ•ด ์ •๋ ฌํ•œ๋‹ค.
    • ํŠœํ”Œ์„ ํ’€์–ด์„œ ์ˆซ์ž ํ•˜๋‚˜ํ•˜๋‚˜์˜ ํ˜•ํƒœ๋กœ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๊ธธ์ด๋ฅผ 0์œผ๋กœ ์ฑ„์›Œ๋„ฃ๋Š”๋‹ค.
  • C ์—ฐ์‚ฐ์ผ ๊ฒฝ์šฐ ํ–‰๊ณผ ์—ด์„ ๋ฐ”๊ฟ”์„œ ์œ„์˜ ๊ณผ์ •์„ ๋˜‘๊ฐ™์ด ์ง„ํ–‰ํ•œ ํ›„ ๋‹ค์‹œ ํ–‰๊ณผ ์—ด์„ ๋ฐ”๊ฟ”์ค€๋‹ค.

 

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

def is_k():
    if r - 1 < len(arr) and c - 1 < len(arr[0]):
        if arr[r - 1][c - 1] == k:
            return True

    return False


def update_arr():
    # ๊ฐœ์ˆ˜ ์„ธ๊ธฐ
    tmp_matrix = []
    max_length = 0
    for i in range(len(arr)):
        numbers = set(arr[i])
        tmp_lst = []
        for num in numbers:
            if num == 0:
                continue
            tmp_lst.append((num, arr[i].count(num)))
        max_length = max(max_length, len(tmp_lst) * 2)
        tmp_matrix.append(tmp_lst)

    # ์ •๋ ฌํ•˜๊ธฐ
    for i in range(len(tmp_matrix)):
        tmp_matrix[i].sort(key=lambda x: (x[1], x[0]))

    # ๊ธธ์ด ๋งž์ถ”๊ธฐ๊ณ  ๋ฐฐ์—ด์— ๋„ฃ๊ธฐ
    for i in range(len(tmp_matrix)):
        tmp_lst = []
        for j in range(len(tmp_matrix[i])):
            tmp_lst.append(tmp_matrix[i][j][0])
            tmp_lst.append(tmp_matrix[i][j][1])
        tmp_lst.extend([0] * (max_length - len(tmp_lst)))
        arr[i] = tmp_lst


if __name__ == '__main__':
    r, c, k = map(int, input().split())
    arr = [list(map(int, input().split())) for _ in range(3)]

    time = 0
    while time < 101:

        # k ๊ฐ’ ๋งž๋Š”์ง€ ํ™•์ธ
        if is_k():
            print(time)
            break

        time += 1  # ์‹œ๊ฐ„ ์ฆ๊ฐ€
        # R์—ฐ์‚ฐ vs C์—ฐ์‚ฐ
        if len(arr) >= len(arr[0]):  # ํ–‰์˜ ๊ฐœ์ˆ˜๊ฐ€ ์—ด์˜ ๊ฐœ์ˆ˜๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด
            update_arr()
        else:  # ํ–‰์˜ ๊ฐœ์ˆ˜๊ฐ€ ์—ด์˜ ๊ฐœ์ˆ˜๋ณด๋‹ค ์ ์œผ๋ฉด
            arr = list(map(list, zip(*arr)))  # ํ–‰๊ณผ ์—ด ๋ฐ”๊พธ๊ธฐ
            update_arr()
            arr = list(map(list, zip(*arr)))  # ๋‹ค์‹œ ํ–‰๊ณผ ์—ด ๋ฐ”๊พธ๊ธฐ
    else:
        print(-1)
 

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: BACKJOON ONLINE JUDGE

๋งํฌ: https://www.acmicpc.net/problem/17140

 

17140๋ฒˆ: ์ด์ฐจ์› ๋ฐฐ์—ด๊ณผ ์—ฐ์‚ฐ

์ฒซ์งธ ์ค„์— r, c, k๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ r, c, k ≤ 100) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ 3๊ฐœ์˜ ์ค„์— ๋ฐฐ์—ด A์— ๋“ค์–ด์žˆ๋Š” ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋ฐฐ์—ด A์— ๋“ค์–ด์žˆ๋Š” ์ˆ˜๋Š” 100๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

www.acmicpc.net

๋ฐ˜์‘ํ˜•