문제요약
나의 코드 및 설명
- def candy_check(n, arr):
사탕을 표현한 리스트에서 가로, 세로로 연속된 같은 사탕이 몇 개 있는지 구하는 메서드를 작성하였다.
가로, 세로 for문을 따로 돌려 작성하였고, 가로 기준으로는 좌우로 인접한 사탕이 서로 같은 사탕이면 garo_cnt에 1을 더한다.
이 때, garo_cnt가 여태까지 누적된 사탕의 최댓값인 max_garo_cnt보다 크면, max_garo_cnt 값을 갱신한다.
세로도 마찬가지 방식으로 작성하였다.
가로, 세로로 연속된 사탕의 개수를 비교해보고 더 큰 값만을 리턴한다. - 다음, 인접한 사탕이 서로 다른 종류라면 위치를 바꾸고 candy_check 메서드를 수행하라는 문제의 지시를 보고 가로, 세로로 인접한 사탕을 서로 스위칭 하는 코드를 각각 작성하였다.
여기서 한참을 헤맨 부분이 있는데, 나는 내부의 for문을 수행 시 temp에 candy 리스트를 임시로 저장해두고, temp 리스트의 값을 스위칭해주었다.(스위칭할 값을 다시 원래대로 되돌리는 코드 작성을 하기 귀찮아서..) 그런데 값이 다르게 출력되었다. 한참을 왜 틀렸는지 살펴보다가 애먼곳의 코드만 수정하였고, 결국 임시로 리스트를 저장한 게 문제라는 것을 깨달았다. 왜 그런지는 아직도 모르겠다 ... 어쨋든 임시로 사용할 리스트는 함부로 만드는 것이 아니구나(?).. 라는 결론을 얻었다.
n = int(input())
candy = []
for i in range(n):
candy.append(list(input()))
garo_cnt = 1
max_garo_cnt = 0
sero_cnt = 1
max_sero_cnt = 0
def candy_check(n, arr):
global garo_cnt, sero_cnt, max_garo_cnt, max_sero_cnt
for y in range(n):
garo_cnt = 1
for x in range(1, n): #1,2
if arr[y][x-1] == arr[y][x]:
garo_cnt += 1
if max_garo_cnt < garo_cnt:
max_garo_cnt = garo_cnt
else:
garo_cnt = 1
for x in range(n):
sero_cnt = 1
for y in range(1, n):
if arr[y-1][x] == arr[y][x]:
sero_cnt += 1
if max_sero_cnt < sero_cnt:
max_sero_cnt = sero_cnt
else:
sero_cnt = 1
return max(max_garo_cnt, max_sero_cnt)
result = []
ans = 0
#가로 스위치
for b in range(n):
for a in range(1, n):
if candy[b][a-1] != candy[b][a]:
candy[b][a-1], candy[b][a] = candy[b][a], candy[b][a-1]
result = candy_check(n, candy)
candy[b][a], candy[b][a-1] = candy[b][a-1], candy[b][a]
if ans < result:
ans = result
#세로 스위치
for a in range(n):
for b in range(1, n):
if candy[b-1][a] != candy[b][a]:
candy[b-1][a], candy[b][a] = candy[b][a], candy[b-1][a]
result = candy_check(n, candy)
candy[b][a], candy[b-1][a] = candy[b-1][a], candy[b][a]
if ans < result:
ans = result
print(ans)
피드백
몇 부분 다른 사람의 코드를 참고하긴 했지만, 대부분을 내가 작성한 코드이다. 비록 1시간 넘게 걸렸지만 해결해서 뿌듯했다.
또, 메서드를 만드는 것이 어색했었는데 이번 문제를 통해 좀 더 숙달이 된 것을 확인할 수 있었고, 내가 성장한 걸 느낄 수 있어서 기쁘다.
'Baekjoon > IM Level' 카테고리의 다른 글
[백준] 2999 비밀 이메일 (브론즈1) (0) | 2023.03.17 |
---|---|
[백준] 10709 기상캐스터 (실버5) (0) | 2023.03.16 |
[백준] 2559 수열 (실버3) / 시간초과 해결 (0) | 2023.03.15 |
[백준] 11399 ATM (실버4) (0) | 2023.03.15 |
[백준] 10163 색종이 (브론즈1) / 서브태스크, 시간초과 해결 (0) | 2023.03.15 |