😎 κ³΅λΆ€ν•˜λŠ” μ§•μ§•μ•ŒνŒŒμΉ΄λŠ” μ²˜μŒμ΄μ§€?

[BAEKJOON python] 17140_이차원 λ°°μ—΄κ³Ό μ—°μ‚° λ³Έλ¬Έ

πŸ¦₯ μ½”ν…Œ/BAEKJOON

[BAEKJOON python] 17140_이차원 λ°°μ—΄κ³Ό μ—°μ‚°

μ§•μ§•μ•ŒνŒŒμΉ΄ 2023. 4. 5. 23:04
728x90
λ°˜μ‘ν˜•
이차원 λ°°μ—΄κ³Ό μ—°μ‚°
크기가 3×3인 λ°°μ—΄ A
λ°°μ—΄μ˜ μΈλ±μŠ€λŠ” 1λΆ€ν„° μ‹œμž‘
1μ΄ˆκ°€ μ§€λ‚ λ•Œλ§ˆλ‹€ λ°°μ—΄μ— μ—°μ‚°μ΄ μ μš©
R μ—°μ‚°: λ°°μ—΄ A의 λͺ¨λ“  ν–‰μ— λŒ€ν•΄μ„œ μ •λ ¬μ„ μˆ˜ν–‰
    ν–‰μ˜ κ°œμˆ˜ ≥ μ—΄μ˜ κ°œμˆ˜μΈ κ²½μš°μ— μ μš©
C μ—°μ‚°: λ°°μ—΄ A의 λͺ¨λ“  μ—΄μ— λŒ€ν•΄μ„œ μ •λ ¬μ„ μˆ˜ν–‰
    ν–‰μ˜ κ°œμˆ˜ < μ—΄μ˜ κ°œμˆ˜μΈ κ²½μš°μ— μ μš©

ν•œ ν–‰ λ˜λŠ” μ—΄μ— μžˆλŠ” μˆ˜λ₯Ό μ •λ ¬ν•˜λ €λ©΄, κ°κ°μ˜ μˆ˜κ°€ λͺ‡ λ²ˆ λ‚˜μ™”λŠ”μ§€ μ•Œμ•„야함
수의 λ“±μž₯ νšŸμˆ˜κ°€ μ»€μ§€λŠ” μˆœμœΌλ‘œ, κ·ΈλŸ¬ν•œ κ²ƒμ΄ μ—¬λŸ¬κ°€μ§€λ©΄ μˆ˜κ°€ μ»€μ§€λŠ” μˆœμœΌλ‘œ μ •λ ¬
λ°°μ—΄ A에 μ •λ ¬λœ κ²°κ³Όλ₯Ό λ‹€μ‹œ λ„£μ–΄μ•Ό ν•¨
μ •λ ¬λœ κ²°κ³Όλ₯Ό λ°°μ—΄μ— λ„£μ„ λ•ŒλŠ”, (μˆ˜μ™€ λ“±μž₯ νšŸμˆ˜)λ₯Ό λͺ¨λ‘ λ„£μœΌλ©°, μˆœμ„œλŠ” μˆ˜κ°€ λ¨Όμ €

ν–‰ λ˜λŠ” μ—΄μ˜ ν¬κΈ°κ°€ 100을 λ„˜μ–΄κ°€λŠ” κ²½μš°μ—λŠ” μ²˜μŒ 100개λ₯Ό μ œμ™Έν•œ λ‚˜λ¨Έμ§€λŠ” λ²„λ¦Ό
λ°°μ—΄ A에 λ“€μ–΄μžˆλŠ” μˆ˜μ™€ r, c, kκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, A[r][c]에 λ“€μ–΄μžˆλŠ” κ°’이 kκ°€ λ˜κΈ° μœ„ν•œ μ΅œμ†Œ μ‹œκ°„

첫째 μ€„에 r, c, kκ°€ μ£Όμ–΄μ§„λ‹€. (1 ≤ r, c, k ≤ 100)
λ‘˜μ§Έ μ€„λΆ€ν„° 3개의 μ€„에 λ°°μ—΄ A에 λ“€μ–΄μžˆλŠ” μˆ˜
λ°°μ—΄ A에 λ“€μ–΄μžˆλŠ” μˆ˜λŠ” 100보닀 μž‘κ±°λ‚˜ κ°™μ€ μžμ—°μˆ˜
arr = [[0] * 101 for _ in range(101)]

# A[r][c]에 λ“€μ–΄μžˆλŠ” 값이 k
r, c, k = map(int, input().split())
# μ²˜μŒμ—λŠ” 3 x 3 이닀
start_r = 3
start_c = 3
for i in range(1, 4):
    aa, bb, cc = map(int, input().split())
    # λ„£μ–΄ 버섯~
    arr[i][1] = aa
    arr[i][2] = bb
    arr[i][3] = cc
cnt = 0


def car_r():
    global start_r, start_c
    r, c = start_r, start_c
    r_c = -1
    for i in range(1, r + 1):
        # ν•΄λ‹Ή μ—΄ μ«™ λ½‘μŒ
        data = arr[i][1:c + 1]
        # 각 값에 λŒ€ν•œ λΉˆλ„κ°’ 체크
        dict = {data[j]: data.count(data[j]) for j in range(len(data))}
        if 0 in dict.keys():
            dict.pop(0)
        tp = list(dict.items())
        # (μˆ˜μ™€ λ“±μž₯ 횟수)
        tp.sort(key=lambda x: (x[1], x[0]))

        if len(tp) > 50:
            l = 50
        else:
            l = len(tp)

        r_c = max(r_c, l * 2)
        temp = []
        for t in range(l):
            a, b = tp[t]
            temp.append(a)
            temp.append(b)
        arr[i][1:l * 2] = temp
        for t in range(l * 2 + 1, 101):
            arr[i][t] = 0
    start_c = r_c


def car_c():
    global start_r, start_c
    r, c = start_r, start_c
    r_c = -1
    for i in range(1, c + 1):
        data = []
        for j in range(1, r + 1):
            data.append(arr[j][i])
        # 각 값에 λŒ€ν•œ λΉˆλ„κ°’ 체크
        dict = {data[j]: data.count(data[j]) for j in range(len(data))}
        if 0 in dict.keys():
            dict.pop(0)
        tp = list(dict.items())
        # (μˆ˜μ™€ λ“±μž₯ 횟수)
        tp.sort(key=lambda x: (x[1], x[0]))

        if len(tp) > 50:
            l = 50
        else:
            l = len(tp)

        r_c = max(r_c, l * 2)
        temp = []
        for t in range(l):
            a, b = tp[t]
            temp.append(a)
            temp.append(b)
        for t in range(len(temp)):
            arr[t + 1][i] = temp[t]
        for t in range(l * 2 + 1, 101):
            arr[t][i] = 0
    start_r = r_c


while True:
    if cnt > 100:
        print(-1)
        break
    if arr[r][c] == k:
        print(cnt)
        break
    if start_r >= start_c:
        car_r()
        cnt += 1
    else:
        car_c()
        cnt += 1

예제 μž…λ ₯

1 2 4
1 2 1
2 1 3
3 3 3

예제 좜λ ₯

52

 

 

https://developer-ellen.tistory.com/61

이 λΆ„κΊΌ 참고함..

근데 μ΄λ²ˆκ»€ λ„ˆλ¬΄ μ–΄λ €μ›ŒλœΈ .. λ‹€λ₯Έκ±Έλ‘œ ν‘Όκ±° μžˆλŠ”λ°

그건 λŸ°νƒ€μž„ μ—λŸ¬ λœ¨λ”λž‘.γ…Ž

 

728x90
λ°˜μ‘ν˜•
Comments