반응형
코드
## SWEA 1258
T = int(input())
for test_case in range(1, T+1):
N = int(input())
arry = [list(map(int,input().split())) for _ in range(N)]
mat_dict = {} ## 문제에서 r,c에 중복이 없다고 했으므로, dict의 key로 활용 가능.
result_arry = []
for i in range(N):
cnt = 0
for j in range(N) :
if arry[i][j] > 0 :
cnt += 1
elif arry[i][j] == 0 and cnt > 0 :
## dict key : col , dict value : row
mat_dict[cnt] = mat_dict.get(cnt,0)+1
cnt = 0
if cnt > 0 :
## arry[i][j]>0 and j = N-1 이라 for 문이 종료되었을 때
mat_dict[cnt] = mat_dict.get(cnt, 0) + 1
for c,r in mat_dict.items() :
result_arry.append((c*r,r,c))
result_arry.sort()
print(f"#{test_case} {len(result_arry)}",end=' ')
for rc,r,c in result_arry:
print(f"{r} {c}",end=' ')
print()
풀이
처음에는 2d arry를 모두 탐색하면서 사각형을 발견하면 col,row를 list에 저장하려고 접근했었다.
그렌데 위 방법으로 접근하니 for과 if가 너무 많아져서 너무 복잡한 코드가 만들어 졌다..
그래서 좀 더 간단히 풀 방법은 없을 지 찾아보다가 문제에서 row와 col에 중복이 없다고 한 부분을 이용했다.
중복이 없으니 row와 col을 dictionary의 ket로 쓸 수 있었고, 굳이 if문을 많이써서 조건을 찾지 않아도 됐다.
arry[i][j]>0 일때 cnt를 증가시키고 0이 발견되면 cnt를 dict에 업데이트 했다.
dict의 key는 column, value는 row이다.
반응형
'개발공부 > [코딩테스트_SWEA]' 카테고리의 다른 글
파이썬 삼성 SW Certi Pro 합격 후기 출제 유형(삼성 SW 역량 테스트 B형 후기) (4) | 2024.06.08 |
---|---|
삼성 SW Certi Advanced 합격 후기(삼성 SW 역량 테스트 후기) (0) | 2024.06.02 |
[SWEA 1251][Python][S/W 문제해결 응용] 4일차 - 하나로 (0) | 2023.01.01 |
[SWEA 1242][Python][S/W 문제해결 응용] 1일차 - 암호코드 스캔 (1) | 2022.12.31 |
[SWEA 1249][Python][S/W 문제해결 응용] 4일차 - 보급로 (1) | 2022.12.30 |
댓글