3월 첫째 주 피드백) 코드를 작성하면서 주의해야할 점.
11일째 백준으로 문제를 풀었지만, 규칙이나 코드 논리 구조의 흐름이 정립되어 있지 않고 헤매이는 듯한 느낌을 받아 chatGPT로 코드 피드백을 받았다. 앞으로 이 피드백을 고려하여 공부를 할 것이다.
🔥 1. 시간의 흐름과 상태 변화 정확히 파악하기
이번 문제는 시간의 흐름을 정확히 관리해야 하는 문제였어.
- 실제 노래가 시작하는 시간과 끝나는 시간을 올바르게 계산해야 함.
- 공백 시간과 노래 재생 시간을 혼동하지 않아야 함.
📌 앞으로 조심할 점:
✅ "이 값이 현재 상태에서 정확히 무엇을 의미하는가?"를 항상 따져보기
✅ 누적 합, 증가 방식, 인덱스 변화 등을 꼼꼼히 점검하기
✅ 문제에서 원하는 순간을 찾는 것이지, 무작정 변수를 증가시키는 것이 아님!
🎯 2. if 조건문을 신중하게 작성하기
이번 코드에서 가장 크게 문제가 된 부분은 잘못된 조건문이 문제 해결을 방해했다는 것이야.
if (ringing <= (musicLength + 5) && ringing >= (musicLength + 1))
이 조건은 공백 시간 범위를 포함하고 있어서 잘못된 값을 찾았어.
결국 "어떤 순간을 체크해야 하는가?"를 먼저 확실히 정의한 뒤, 이를 코드로 변환해야 해.
📌 앞으로 조심할 점:
✅ if 문을 작성하기 전에 수식이 실제로 무엇을 의미하는지 종이에 적어보기
✅ 불필요한 범위가 포함되지 않았는지 체크
✅ 비슷한 경계값에서 버그가 발생할 가능성이 있는지 검토
⏳ 3. 변수의 의미를 정확히 설정하기
이전 코드에서는 musicLength라는 변수를 곡의 총 길이로 쓸지, 곡이 끝나는 시간으로 쓸지 애매했어.
이런 애매함이 잘못된 값이 계속 누적되는 문제를 만들었지.
🚨 변수의 의미가 애매하면 결국 논리가 꼬이게 된다!
🚀 항상 "이 변수는 정확히 무엇을 나타내는가?"를 생각하고 작성하자.
📌 앞으로 조심할 점:
✅ 변수를 선언할 때 반드시 그 의미를 명확하게 하자!
✅ 변수를 노래 길이인지, 현재 시간인지, 시작 시간인지 명확히 구분
✅ 불필요하게 변수를 바꾸는 코드가 있는지 점검
🛠 4. 디버깅 방법 개선하기 (출력으로 체크하기!)
이번 문제를 해결하는 과정에서, 디버깅을 통해 어떤 값이 어떻게 변화하는지 확인했으면 더 빠르게 문제를 해결할 수 있었을 거야.
💡 디버깅 팁:
- 중간중간 System.out.println(변수)로 현재 값이 제대로 변하는지 확인
- for 루프 안에서 현재 상태를 출력해서 예상과 맞는지 체크
- 경계값(예: 0, 1, 최대값)에서 어떻게 동작하는지 직접 확인
예를 들어, 아래처럼 현재 시간을 출력했다면 어디가 잘못됐는지 쉽게 찾을 수 있었을 거야.
System.out.println("현재 시간: " + startTime + " ~ " + (startTime + musicLength - 1));
📌 앞으로 조심할 점:
✅ 문제가 생기면 중간 값을 출력해서 디버깅하는 습관을 들이기
✅ 루프를 돌면서 값이 예상대로 변하는지 꼭 확인하기
✅ 특정 경계값(예: 0초, 마지막 초 등)에서 예외가 발생하지 않는지 직접 테스트하기
📌 5. 문제를 코드로 바꾸기 전에, 직접 시뮬레이션 해보기
문제 해결의 핵심은 손으로 직접 시뮬레이션해 보는 거야.
이번 문제도 실제 시간 흐름을 종이에 써보면 바로 해결 방법이 보였을 거야!
✅ 앞으로의 습관
1️⃣ "어떤 값이 언제 바뀌는지?" 직접 써 보기
2️⃣ 예제 입력을 직접 넣고, 값이 어떻게 변화하는지 적어보기
3️⃣ 코드를 작성하기 전에 먼저 해결 방법을 머릿속에서 정리하기!
💡 총 정리: 앞으로 문제 풀 때 조심해야 할 점!
문제 발생 원인 앞으로 개선할 점
| 시간 계산 실수 | 시작 시간, 종료 시간을 정확히 설정하기 |
| 잘못된 조건문 | if 문을 쓰기 전에, 해당 조건이 정확히 무엇을 의미하는지 검토하기 |
| 변수 의미 모호함 | 각 변수의 역할을 명확하게 정리하고 사용하기 |
| 디버깅 부족 | 중간 값을 System.out.println()으로 확인하며 문제 추적 |
| 직접 시뮬레이션 부족 | 문제를 코드로 옮기기 전에, 직접 손으로 계산해 보기 |
🚀 이제 앞으로 이런 문제를 만나면?
✅ 변수 의미를 먼저 정확히 정의하고!
✅ 코드로 옮기기 전에 손으로 시뮬레이션 해보고!
✅ 디버깅할 때 중간 값을 출력해서 확인하고!
✅ 경계값(0, 1, 최대값)에서 테스트해서 오류를 방지하자!