본문 바로가기

백준

3월 첫째 주 피드백) 코드를 작성하면서 주의해야할 점.

11일째 백준으로 문제를 풀었지만, 규칙이나 코드 논리 구조의 흐름이 정립되어 있지 않고 헤매이는 듯한 느낌을 받아 chatGPT로 코드 피드백을 받았다. 앞으로 이 피드백을 고려하여 공부를 할 것이다. 


🔥 1. 시간의 흐름과 상태 변화 정확히 파악하기

이번 문제는 시간의 흐름을 정확히 관리해야 하는 문제였어.

  • 실제 노래가 시작하는 시간과 끝나는 시간을 올바르게 계산해야 함.
  • 공백 시간과 노래 재생 시간을 혼동하지 않아야 함.

📌 앞으로 조심할 점:
✅ "이 값이 현재 상태에서 정확히 무엇을 의미하는가?"를 항상 따져보기
누적 합, 증가 방식, 인덱스 변화 등을 꼼꼼히 점검하기
문제에서 원하는 순간을 찾는 것이지, 무작정 변수를 증가시키는 것이 아님!


🎯 2. if 조건문을 신중하게 작성하기

이번 코드에서 가장 크게 문제가 된 부분은 잘못된 조건문이 문제 해결을 방해했다는 것이야.

if (ringing <= (musicLength + 5) && ringing >= (musicLength + 1))

이 조건은 공백 시간 범위를 포함하고 있어서 잘못된 값을 찾았어.
결국 "어떤 순간을 체크해야 하는가?"를 먼저 확실히 정의한 뒤, 이를 코드로 변환해야 해.

📌 앞으로 조심할 점:
✅ if 문을 작성하기 전에 수식이 실제로 무엇을 의미하는지 종이에 적어보기
불필요한 범위가 포함되지 않았는지 체크
비슷한 경계값에서 버그가 발생할 가능성이 있는지 검토


3. 변수의 의미를 정확히 설정하기

이전 코드에서는 musicLength라는 변수를 곡의 총 길이로 쓸지, 곡이 끝나는 시간으로 쓸지 애매했어.
이런 애매함이 잘못된 값이 계속 누적되는 문제를 만들었지.

🚨 변수의 의미가 애매하면 결국 논리가 꼬이게 된다!
🚀 항상 "이 변수는 정확히 무엇을 나타내는가?"를 생각하고 작성하자.

📌 앞으로 조심할 점:
변수를 선언할 때 반드시 그 의미를 명확하게 하자!
✅ 변수를 노래 길이인지, 현재 시간인지, 시작 시간인지 명확히 구분
불필요하게 변수를 바꾸는 코드가 있는지 점검


🛠 4. 디버깅 방법 개선하기 (출력으로 체크하기!)

이번 문제를 해결하는 과정에서, 디버깅을 통해 어떤 값이 어떻게 변화하는지 확인했으면 더 빠르게 문제를 해결할 수 있었을 거야.

💡 디버깅 팁:

  1. 중간중간 System.out.println(변수)로 현재 값이 제대로 변하는지 확인
  2. for 루프 안에서 현재 상태를 출력해서 예상과 맞는지 체크
  3. 경계값(예: 0, 1, 최대값)에서 어떻게 동작하는지 직접 확인

예를 들어, 아래처럼 현재 시간을 출력했다면 어디가 잘못됐는지 쉽게 찾을 수 있었을 거야.

System.out.println("현재 시간: " + startTime + " ~ " + (startTime + musicLength - 1));

📌 앞으로 조심할 점:
문제가 생기면 중간 값을 출력해서 디버깅하는 습관을 들이기
루프를 돌면서 값이 예상대로 변하는지 꼭 확인하기
특정 경계값(예: 0초, 마지막 초 등)에서 예외가 발생하지 않는지 직접 테스트하기


📌 5. 문제를 코드로 바꾸기 전에, 직접 시뮬레이션 해보기

문제 해결의 핵심은 손으로 직접 시뮬레이션해 보는 거야.
이번 문제도 실제 시간 흐름을 종이에 써보면 바로 해결 방법이 보였을 거야!

✅ 앞으로의 습관

1️⃣ "어떤 값이 언제 바뀌는지?" 직접 써 보기
2️⃣ 예제 입력을 직접 넣고, 값이 어떻게 변화하는지 적어보기
3️⃣ 코드를 작성하기 전에 먼저 해결 방법을 머릿속에서 정리하기!


💡 총 정리: 앞으로 문제 풀 때 조심해야 할 점!

문제 발생 원인 앞으로 개선할 점

시간 계산 실수 시작 시간, 종료 시간을 정확히 설정하기
잘못된 조건문 if 문을 쓰기 전에, 해당 조건이 정확히 무엇을 의미하는지 검토하기
변수 의미 모호함 각 변수의 역할을 명확하게 정리하고 사용하기
디버깅 부족 중간 값을 System.out.println()으로 확인하며 문제 추적
직접 시뮬레이션 부족 문제를 코드로 옮기기 전에, 직접 손으로 계산해 보기

🚀 이제 앞으로 이런 문제를 만나면?

변수 의미를 먼저 정확히 정의하고!
코드로 옮기기 전에 손으로 시뮬레이션 해보고!
디버깅할 때 중간 값을 출력해서 확인하고!
경계값(0, 1, 최대값)에서 테스트해서 오류를 방지하자!