
코딩테스트 문제 푸는 방향
1. 문제를 정독한다. 정독하면서 손으로 한 번 풀어본다.
2. 접근 방법을 구상한다.
3. 핵심 코드를 시각적으로 보이도록 손코딩한다.
4. 코드를 구현한다.
5. 디버깅 및 개선을 한다.
6. 부분 정답이 나올 시 1번으로 돌아가 더 꼼꼼하게 읽어보고 다른 접근 방법은 없는지 생각해본다.
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PzOCKAigDFAUq
N * N 배열 안에 파리의 개수가 입력되어 있다.
M * M의 파리채 크기
N은 5이상 15이하이다.
M은 2이상 N이하이다.
각 영역의 파리 갯수는 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문을 돌릴 때 범위 설정이 아직 익숙하지 않은 것 같다ㅜㅜ 많이 연습하는 것이 답 ㅜㅜ
계속 열심히 합시덩,, 가즈아