[๋ฐฑ์ค€๐Ÿฅˆ4] 14499 - ์ฃผ์‚ฌ์œ„ ๊ตด๋ฆฌ๊ธฐ (Python)

eziยท2024๋…„ 6์›” 24์ผ

Review

[1์ฐจ ์ฝ”๋“œ ๋ฌธ์ œ์ ]

1. ๋Œ€๊ฐ์„  ์ฒดํฌ ์ธ๋ฑ์Šค ์˜ค๋ฅ˜:
๋Œ€๊ฐ์„  ์ฒดํฌ ํ•จ์ˆ˜์—์„œ ์ธ๋ฑ์Šค๊ฐ€ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
check_dia1_list์™€ check_dia2_list์˜ ์ขŒํ‘œ๊ฐ€ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

2. ํ•จ์ˆ˜์—์„œ cnt ์ฆ๊ฐ€ ์‹œ์  ๋ฐ ๋ฆฌํ„ด ์˜ค๋ฅ˜:
๊ฐ ์ฒดํฌ ํ•จ์ˆ˜์—์„œ cnt๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  True๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ถ€๋ถ„์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
return ๋ฌธ์ด ๋ฐ˜๋ณต๋ฌธ ์•ˆ์— ์žˆ์–ด์„œ ํ•œ ๋ฒˆ๋งŒ ์ฒดํฌํ•˜๊ณ  ์ข…๋ฃŒ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ์ค‘๋ณต ์ฒดํฌ ๋ฐฉ์ง€:
ํ•œ ๋ฒˆ ์ฒดํฌ๋œ ๋น™๊ณ  ๋ผ์ธ์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์นด์šดํŠธ๋˜์ง€ ์•Š๋„๋ก ๊ฐœ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

4. ์ค‘์•™ ๊ฐ’๋ถ€ํ„ฐ ์‹œ์ž‘:
๋น™๊ณ  ํŒ์˜ ์ค‘์•™๋ถ€ํ„ฐ ๊ฐ’์„ ์ฒดํฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœจ HOW? ์ฒ˜์Œ ์•„์ด๋””์–ด

๊ฐ€๋กœ, ์„ธ๋กœ, ๋Œ€๊ฐ์„  ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜ ๋งŒ๋“ค๊ณ 
๋‚˜์˜ ๋น™๊ณ ํŒ์„ ์ด์ค‘ for๋ฌธ์œผ๋กœ ๋Œ๋ฉด์„œ ์‚ฌํšŒ์ž๊ฐ€ ๋ถ€๋ฅด๋Š” ์ˆซ์ž๋ฅผ queue๋กœ ๋‘๊ณ  ํ•œ ๊ฐœ์”ฉ ๊บผ๋‚ด๋ฉด์„œ ๋น„๊ต

์‚ฌํšŒ์ž์˜ ์ˆ˜๋ฅผ ๋‚˜์˜ ๋น™๊ณ ํŒ์—์„œ ์ฒดํฌํ•  ๋•Œ ๋งˆ๋‹ค, ํ•ด๋‹น ์ˆ˜๋Š” 0์œผ๋กœ ๋ฐ”๊ฟ”์ค˜๊ณ  for๋ฌธ ๋‚˜๊ฐ€๊ธฐ..

1์ฐจ Code - ์‹คํŒจ

from collections import deque

binggo = []
for _ in range(5):
    binggo.append(list(map(int, input().split())))

check= deque()
for _ in range(5):
    check_list = list(map(int, input().split()))
    for c in check_list:
        check.append(c)

cnt = 0

def check_row():
    global cnt
    
    for i in range(5):
        binggo_check = True
        for j in range(5):
            if binggo[i][j] != 0:
                binggo_check = False
        if binggo_check:
            cnt += 1
            return True
    
def check_col():
    global cnt
    for i in range(5):
        binggo_check = True
        for j in range(5):
            if binggo[j][i] != 0:
                binggo_check = False
                return
        if binggo_check:
            cnt += 1
        return True
    
def check_dia1():
    global cnt
    
    check_dia1_list = [(1,1),(2,2),(3,3),(4,4),(5,5)]
    binggo_check = True
    for x, y in check_dia1_list:
        if binggo[x][y] != 0:
            binggo_check = False
            return False
    if binggo_check:
        ans += 1
        return True

def check_dia2():
    global cnt
    check_dia2_list = [(4,0),(3,1),(2,2),(1,3),(0,4)]
    binggo_check = True
    for x, y in check_dia2_list:
        if binggo[x][y] != 0:
            binggo_check = False
            return False
    if binggo_check:
        cnt += 1
        return True

ans = 0
while check:
    go = check.popleft()
    flag = False

    for i in range(5):
        for j in range(5):      
            if binggo[i][j] == go:
                print("binggo[i][j]", binggo[i][j])
                binggo[i][j] = 0
                flag = True
                ans += 1
                break
            
        if flag:
            break
        
    check_row()
    print("check_row", cnt)
    if cnt == 3:
        print(ans)
        break
    
    check_col()
    print("check_col", cnt)
    if cnt == 3:
            print(ans)
            break
        
    check_dia1()
    print("check_dia1", cnt) 
    if cnt == 3:
            print(ans)
            break
        
    check_dia2()
    print("check_dia2", cnt)
    if cnt == 3:
            print(ans)
            break
        

2์ฐจ Code - ์ •๋‹ต

from collections import deque
binggo = []
for _ in range(5):
    binggo.append(list(map(int, input().split())))

check = deque()
for _ in range(5):
    check_list = list(map(int, input().split()))
    for c in check_list:
        check.append(c)

def check_row():
    global cnt
    for i in range(5):
        if all(binggo[i][j] == 0 for j in range(5)):
            cnt += 1

def check_col():
    global cnt
    for i in range(5):
        if all(binggo[j][i] == 0 for j in range(5)):
            cnt += 1

def check_dia1():
    global cnt
    if all(binggo[i][i] == 0 for i in range(5)):
        cnt += 1

def check_dia2():
    global cnt
    if all(binggo[i][4-i] == 0 for i in range(5)):
        cnt += 1

ans = 0
while check:
    go = check.popleft()
    
    for i in range(5):
        for j in range(5):
            if binggo[i][j] == go:
                binggo[i][j] = 0
                break
        else:
            continue
        break
    
    cnt = 0
    check_row()
    check_col()
    check_dia1()
    check_dia2()
    
    if cnt >= 3:
        print(ans + 1)
        break
    
    ans += 1

3์ฐจ Code - ์ •๋‹ต+๊ฐœ์„ 

from collections import deque

# ๋น™๊ณ ํŒ ์ž…๋ ฅ
binggo = []
for _ in range(5):
    binggo.append(list(map(int, input().split())))

# ์‚ฌํšŒ์ž๊ฐ€ ๋ถ€๋ฅด๋Š” ์ˆซ์ž ์ˆœ์„œ ์ž…๋ ฅ
check = deque()
for _ in range(5):
    check_list = list(map(int, input().split()))
    for c in check_list:
        check.append(c)

def check_bingo():
    cnt = 0
    # ํ–‰ ๊ฒ€์‚ฌ
    for i in range(5):
        if all(binggo[i][j] == 0 for j in range(5)):
            cnt += 1
    # ์—ด ๊ฒ€์‚ฌ
    for i in range(5):
        if all(binggo[j][i] == 0 for j in range(5)):
            cnt += 1
    # ๋Œ€๊ฐ์„  ๊ฒ€์‚ฌ (์™ผ์ชฝ ์œ„์—์„œ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜)
    if all(binggo[i][i] == 0 for i in range(5)):
        cnt += 1
    # ๋Œ€๊ฐ์„  ๊ฒ€์‚ฌ (์˜ค๋ฅธ์ชฝ ์œ„์—์„œ ์™ผ์ชฝ ์•„๋ž˜)
    if all(binggo[i][4-i] == 0 for i in range(5)):
        cnt += 1
    return cnt

ans = 0
while check:
    go = check.popleft()
    
    found = False

    for i in range(5):
        if found:
            break
        for j in range(5):
            if binggo[i][j] == go:
                binggo[i][j] = 0
                found = True
                break
    
    if check_bingo() >= 3:
        print(ans + 1)
        break
    
    ans += 1

์‹œ๊ฐ„๋ณต์žก๋„

O(n)
profile
์ฐจ๊ณก์ฐจ๊ณก

0๊ฐœ์˜ ๋Œ“๊ธ€