[SW Expert Academy][D2][python] 2001. 파리 퇴치, N*N배열 4중 for문 돌리기

youngee·2023년 6월 2일

코딩테스트 문제 푸는 방향
1. 문제를 정독한다. 정독하면서 손으로 한 번 풀어본다.
2. 접근 방법을 구상한다.
3. 핵심 코드를 시각적으로 보이도록 손코딩한다. 
4. 코드를 구현한다. 
5. 디버깅 및 개선을 한다.
6. 부분 정답이 나올 시 1번으로 돌아가 더 꼼꼼하게 읽어보고 다른 접근 방법은 없는지 생각해본다. 

2001. 파리 퇴치

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PzOCKAigDFAUq

N * N 배열 안에 파리의 개수가 입력되어 있다.

M * M의 파리채 크기

[제약 사항]

  1. N은 5이상 15이하이다.

  2. M은 2이상 N이하이다.

  3. 각 영역의 파리 갯수는 30이하이다.

[문제 해결 방향]

0값 3*3개를 가진 2차원 배열 생성

array3_3 = [[0]*열 for in range(행)]

배열을 입력 받는 방법

arrayN = [list(map(int, input().split())) for in range(N)]

행, 열을 따로 for문으로 돌려주고 또 그 중 M 만큼만 또 범위를 설정해 for문을 돌려주면서 더해준다.

여기서 인덱스를 잘 설정해야 할 것 같다.

[파이썬 코드]

T = int(input()) # 테스트 케이스
for test_case in range(1, T+1):
    N, M = map(int, input().split()) # N : 전체 영역, M : 파리채 크기

    # 영역에 채워진 수 입력받기
    array_N = [list(map(int, input().split())) for _ in range(N)]
    
    # 죽은 파리들의 합을 저장할 리스트 
    flydie = [] 

    for i in range(0,N-M+1): # 행
        for j in range(0, N-M+1): # 열
            flysum = 0
            for k in range(M): # 행
                for l in range(M): # 열
                    flysum += array_N[i+k][j+l] # array_N[행][열]
            flydie.append(flysum) # 죽은 파리들의 합인 flysum을 flydie 리스트에 추가한다. 
    max_sum = max(flydie) # flydie 중 가장 큰 값을 찾는다.
    print("#"+str(test_case), str(max_sum))

처음에는 max_flydie 변수를 만들어서 계속해서 값을 비교해보려고 했는데 조금 복잡해지는 것 같아서
다른 사람이 리스트를 만드는 것을 보고 리스트로 바꿔줬다.

https://velog.io/@yb_engineer/Algorithm-SWEA-2001.%ED%8C%8C%EB%A6%AC%ED%87%B4%EC%B9%98-python

이게 훨씬 편하고 좋은 것 같다ㅏ
\

[느낀점]

처음으로,,ㅎ 다른 사람의 코드를 보지않고 먼저 생각을 하면서 푼 문제다.

이제 슬슬 감이 오기 시작하는 것 같다..

그리고 for문을 돌릴 때 범위 설정이 아직 익숙하지 않은 것 같다ㅜㅜ 많이 연습하는 것이 답 ㅜㅜ

계속 열심히 합시덩,, 가즈아

0개의 댓글