BOJ/๐Ÿฅˆ

โ˜…BF Upper-Intermediate I - 2 Solvedโ˜…

metamong 2023. 10. 26.

โ˜… 2503 ์ˆซ์ž ์•ผ๊ตฌ โ˜…

 

import sys
from itertools import permutations
input=sys.stdin.readline

N=int(input())
pos=list(permutations(['1','2','3','4','5','6','7','8','9'],3))
idxs=[n for n in range(len(pos))]

def get_strike_ball(a,b):
    strike=0
    for x,y in zip(a,b):
        if x==y: strike+=1
    return (str(strike),str(len(a+b)-len(set(a+b))-strike))

for _ in range(N):
    num,S,B=input().split()
    didxs=[]
    for i in idxs:
        posi=''.join(list(pos[i]))
        if get_strike_ball(list(posi),list(num)) != (S,B): didxs.append(i)
    for di in didxs: idxs.remove(di)
print(len(idxs))

 

๐ŸŒž 123๊ณผ ๊ฐ™์ด 9๊ฐœ์˜ ์ž์—ฐ์ˆ˜ ์ค‘ ์ˆœ์„œ ์žˆ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ 3๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์Œ์˜ ๊ฐœ์ˆ˜ 9P3 permutations()

๐ŸŒž strike / ball ๊ฐœ์ˆ˜ count

: ๋จผ์ € strike ๊ฐœ์ˆ˜ ์„ธ๊ณ , ์ „์ฒด ๊ฐœ์ˆ˜ - ์ค‘๋ณต ์—†๋Š” ๊ฐœ์ˆ˜ - strike ๊ฐœ์ˆ˜๋ฅผ ball ๊ฐœ์ˆ˜

 

๐ŸŒž permutations() ๊ฒฐ๊ณผ pos list brute-force(๋ฒ”์œ„ ์ž‘์•„์„œ brute-force ๊ฐ€๋Šฅ) → join() / list()๋กœ type ํ†ต์ผ ๋’ค ์›๋ž˜์˜ (S,B)์™€ ๋น„๊ต → ๋‹ค๋ฅด๋‹ค๋ฉด ๋ณ„๋„์˜ ์‚ญ์ œ idx ๋ชจ์Œ didx update(๊ทธ ์ž๋ฆฌ์—์„œ removeํ•˜๋ฉด ์˜ค๋ฅ˜ ๋ฐœ์ƒ: ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋ณ„๋„์˜ ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค์–ด ํ•œ ๋ฒˆ์— ๋ชจ์€ ๋’ค ๋”ฐ๋กœ for loop ๋Œ๋ ค remove) → ์ดํ›„ didx for loop ๋Œ๋ ค ๋ฐ”๋กœ idx remove() → ์ตœ์ข… ๋‚จ์€ idx list ์›์†Œ ์ˆ˜ ์ถœ๋ ฅ


โ˜… 3085 ์‚ฌํƒ• ๊ฒŒ์ž„ โ˜…

 

#potential swap included in an array
import sys,copy
input=sys.stdin.readline

def get_consecutive_max(arr):
    ans,cur=1,1
    for i in range(1,len(arr)):
        if arr[i]==arr[i-1]:
            cur+=1
        else:
            ans=max(ans,cur)
            cur=1
    return max(ans,cur)

def bomboni(arr):
    cur=0
    n=len(arr)
    #row-wise
    for i in range(0,n):
        cur=max(cur,get_consecutive_max(arr[i]))
    #column-wise
    for i in range(n):
        column_arr=[]
        for j in range(n):
            column_arr.append(arr[j][i])
        cur=max(cur,get_consecutive_max(column_arr))
    return cur

N=int(input())
ans,arr=0,[]
for _ in range(N): arr.append(list(input().rstrip())) #made an array
ans=0
for i in range(N):
    for j in range(N):
        if j<=(N-2) and arr[i][j] != arr[i][j+1]: #right dir
            arr2=copy.deepcopy(arr)
            arr2[i][j], arr2[i][j+1] = arr2[i][j+1], arr2[i][j]
            ans=max(ans,bomboni(arr2))
        if i<=(N-2) and arr[i][j] != arr[i+1][j]: #down dir
            arr2=copy.deepcopy(arr)
            arr2[i][j], arr2[i+1][j] = arr2[i+1][j], arr2[i][j]
            ans=max(ans,bomboni(arr2))    
print(ans)

 

โ‘  array traversal ๊ณผ์ •์—์„œ swap๋˜๋Š” direction → right direction / downward direction

: ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ array๊ฐ€ ์•„๋‹Œ ์ƒˆ๋กœ์šด arr2 ๋งŒ๋“ค์–ด์„œ(deepcopy() ์‚ฌ์šฉ) bomboni() ์ง„ํ–‰

 

โ‘ก bomboni(arr)

row-wise / column-wise ๋ฐฉํ–ฅ traversal

 

โ‘ข get_consecutive(arr)

: ์ฃผ์–ด์ง„ 1์ฐจ์› array์—์„œ ๊ฐ€์žฅ ๊ธธ๊ฒŒ ์—ฐ์†ํ•˜๋Š” ๋ฐฐ์—ด ๊ธธ์ด ์ถœ๋ ฅ

: ans ๋ณ€์ˆ˜ ๋ˆ„์  update(cur ๋ณ€์ˆ˜ iterate) → ๋งˆ์ง€๋ง‰ return์‹œ max() ํ•œ๋ฒˆ ๋” ์ ๊ฒ€(!)


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

๋Œ“๊ธ€