알고리즘/백준 문제풀이

[삼성SW역량][Python/BOJ] 백준 17140 이차원 배열과 연산(구현)

개발자 덕구🐾 2022. 7. 18. 10:55
728x90

 

🐾 20220927

 

 

이 문제는 정말 구현만 하면 된다.

근데 이런 생각을 대체 어떻게 하지....

 

 

 

이차원 배열에서 전치된 배열을 구하고 싶다면 (*mp)를 하면 된다. 

다만 배열 형태로 나오는 것이 아니기에 zip(*mp)를 해주면 된다. 

 

 

 

해당 숫자와 개수를 구하기 위해서는 

set을 이용해서 중복을 제거한다는 것이 신기했다. 

그리고 0 이 아니라면 해당 숫자와 개수를 넣는다.

 

for i in set(row) :

    if i : tmp.append([i, row.count(i)]) 

 

 

 

 

 

def sor(A,clen) :
    for idx , row in enumerate(A) :
        tmp = []
        for i in set(row) :
            if i : # 0은 무시 
                tmp.append([i,row.count(i)])
        tmp.sort(key = lambda x : (x[1], x[0]))  
        tmplen = len(tmp) 
        if tmplen > 50 : tmplen = 50   # 100보다 크다면 100보다 작도록 만들기
        clen = max(clen, tmplen*2) #  최대길이 갱신
        
        A[idx] = []
        for i in range(tmplen) :
            A[idx].append(tmp[i][0])
            A[idx].append(tmp[i][1])
        
    # 가장 긴 길이 대비 비이었는 공간을 0으로 채워주기 
    for i in range(len(A)) :
        for _ in range(clen - len(A[i])) :
            A[i].append(0)
    return A,clen
         
                    
if __name__=="__main__" :
    r,c,k = map(int,input().split())
    mp = [list(map(int,input().split())) for i in range(3)]

    
    rlen ,clen = 3,3

    for time in range(101) :
    	# r,c가 존재한고 일치한다면 
        if r <= rlen and c <= clen and mp[r-1][c-1] == k :
            print(time)
            exit(0)
        # 행의 길이가 열의 길이보다 크거나 같다면 
        # 열의 길이가 변하므로 열의 길이를 매개변수로 
        if rlen >= clen : # R연산 
            mp,clen= sor(mp,clen)
        # 행의 길이가 열의 길이보다 작다면 , C 연산 
        # 행의 길이가 변하므로 행의 길이를 매개변수로 
        else : # C연산 
            mp,rlen = sor(list(zip(*mp)), rlen)
            mp = list(zip(*mp))
    print(-1) # 100번을 돌아도 k가 안되었을 때

 

 

 

 

 

 

 

참고 블로그 :

https://subin-0320.tistory.com/82?category=475257 

 

[BOJ] 17140.이차원배열과 연산 (Python)

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

subin-0320.tistory.com

 

 

 

반응형