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
반응형
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[삼성SW역량][Python/BOJ] 백준 17779 게리맨더링2(구현) (0) | 2022.07.21 |
---|---|
[삼성SW역량][Python/BOJ] 백준 17142 연구소3(BFS) (0) | 2022.07.18 |
[삼성SW역량][Python/BOJ] 백준 20055 컨베이어 벨트 위의 로봇(구현) (0) | 2022.07.16 |
[삼성SW역량][Python/BOJ] 백준 17144 미세먼지 안녕!(시뮬레이션) (0) | 2022.07.15 |
[삼성SW역량][Python/BOJ] 백준 15684 사다리조작(dfs) (0) | 2022.07.15 |