-
[Python] 6098 기초-리스트 : 성실한 개미코딩테스트/CodeUp 2024. 5. 23. 09:40
https://codeup.kr/problem.php?id=6098&rid=0
[기초-리스트] 성실한 개미(py)
python언어기초100제v1.0 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용
codeup.kr
[문제 풀기 전 생각한 부분]
- d[x][y] 을 행으로 for 문 돌리다가 값이 0 일때는 9로 바꿔주고면서 계속
- 만약 그 값이 1이라면 그 다음행으로 넘어가고 1번 반복
- 그 값이 2라면 9로 바꾸고 끝.
[my_code]
d = [[0] * 11 for _ in range(11)] for i in range(10) : a = input().split() for j in range(10) : d[i + 1][j + 1] = int(a[j]) # 여기 문제. x = 2 for j in range(2, 10) : if d[x][j] == 0 or d[x][j] == 2 : d[x][j]=9 else: x += 1 d[x][j-1]=9 for i in range(1, 11) : for j in range(1, 11) : print(d[i][j], end=' ') print()
[문제점]
- 예외가 너무 많다.
- 예를 들어서d[x][y] == 2일 때, 먹이를 발견했으니깐 멈춰야 되는 데 그저 9로 바꾸고 그 다음 for문
- d[x][y] == 1 즉, else에 해당하는 상황일 때, x + 1 해서 다음 행으로 넘어가는 가서 직전 열에 해당하는
값을 9로 바꿔 주는 건 좋다. 근데 그 다음 for문 돌아갈 때 한칸 건너 띄고 시작한다.
ex) d[2][3] == 1 을 만나 else로 갔다 하자. 그러면 d[3][2]를 = 9로 만들어주고, d[3][3]을 확인하고 싶은데,
d[3][4]를 확인하게 되는 것이다. - for문(2,10)으로 8번 실행되는 데, 그 전에 먹이를 찾을 수도 있고 8번 이상 걸릴 수도 있다.
따라서 for문을 사용하려면 반복횟수를 아주 크게 잡아야 할 것이다.
[문제점 해결]
d = [[0] * 11 for _ in range(11)] for i in range(10) : a=input().split() for j in range(10) : d[i+1][j+1]=int(a[j]) x, y = 2, 2 while True : if d[x][y] == 0 : d[x][y] = 9 elif d[x][y] == 2 : d[x][y] = 9 break if (d[x][y+1]==1 and d[x+1][y]==1) or (x==9 and y==9) : break if d[x][y+1] != 1 : y += 1 elif d[x+1][y] != 1 : x += 1 for i in range(1, 11) : for j in range(1, 11) : print(d[i][j], end=' ') print()
[여기서 배운 점]
x, y = 2
습관적으로 둘다 값이 2이니깐 저렇게 했는 데 안 되서 ㅇ.ㅇ 하고 있었다.
변수가 두 개면 할당해주는 값도 2개 넣자....
아 그리고 개행 잘 넣어서 while문이 제대로 break 될 수 있게 하자.
추가로 while문 안에 중복으로 계산하는 부분이 있다면 수정해주자.
예를 들어서
if d[x][y+1] == 0 : y += 1 elif d[x+1][y] == 0 : x += 1
처음엔 위 코드 같이 했었는 데 시간초과 오류가 계속 났다. 그 이유는 위 코드와 같은 역할을 하는
코드가 존재해서 break로 끝나지 않는 문제 였던 거였다. soif d[x][y+1] != 1 : y += 1 elif d[x+1][y] != 1 : x += 1
위 코드와 같이 수정하게 된 것이다.
'코딩테스트 > CodeUp' 카테고리의 다른 글
[Python] CodeUp 1409 : 기억력 테스트 1 (0) 2024.05.27 [Python] CodeUp 1420 : 3등 찾기 (0) 2024.05.27 [Python] 6097 : 기초-리스트 설탕과자 뽑기 (0) 2024.05.22 [Python] 6096 : 기초 리스트 바둑알 십자 뒤집기 (0) 2024.05.22 [Python] 1412 : 알파벳 개수 출력하기 (0) 2024.05.20