오늘은 날짜 계산, 요일 찾기 같은 시뮬레이션 유형을 집중적으로 풀었다.
갭체크에서 시뮬레이션이 "부족한 상태"로 나왔었는데,
막상 문제를 풀어보니 어디서 막히는지 확실히 느껴졌다.
https://www.codetree.ai/ko/no-free-lunch-2026
---
날짜 계산 문제에서 배운 것
처음엔 while(true) 로 하루하루 세는 방식으로 풀었다.
근데 생각해보니 각 날짜를 1월 1일부터의 누적 일수로 변환해서 빼는 방식이 훨씬 효율적이었다.
for(int i = 1; i < m1; i++){
d1 += days[i];
}
for(int i = 1; i < m2; i++){
d2 += days[i];
}
int cnt = d2 - d1;
while로 하루하루 세는 것보다 훨씬 빠르고 깔끔했다.
---
요일 계산에서 배운 모듈러 트릭
요일 문제를 풀다가 cnt가 음수일 때 문제가 생겼다.
처음엔 Math.abs() 로 절댓값을 써봤는데, 방향 정보가 사라져서 if문으로 해결했었다.
cnt = d2 - d1;
if(cnt >= 0){
System.out.println(day[cnt % 7 + 1]);
}
else{
cnt = Math.abs(cnt);
System.out.println(cnt%7 == 0 ? day[cnt % 7 + 1 ] : day[8- cnt % 7]);
}
하지만 더 좋은 방법은 이 트릭이었다
cnt = d2 - d1;
int idx = ((cnt % 7) + 7) % 7;
System.out.println(day[idx]);
cnt가 음수든 양수든 올바른 인덱스를 뽑아주는 방식이다.
+7) % 7 이 음수 나머지를 양수로 바꿔주는 역할을 한다.
순환하는 값(요일, 시계 등)을 다룰 때 자주 쓰이는 패턴이라고 한다.
---
String 비교할 때 실수
문자열 비교할 때 == 를 썼다가 에러가 났다.
if(s == day[i]) // 안됨!
if(s.equals(day[i])) // 이렇게 해야함.
String은 == 말고 반드시 .equals() 를 써야 한다.
자꾸 까먹는 부분인데 이번에 확실히 기억했다.
---
느낀 점
시뮬레이션 문제는 로직보다 엣지케이스에서 자꾸 막혔다.
틀릴 때마다 왜 틀렸는지 이해하면서 풀었더니 확실히 감이 잡히는 느낌이다.
다음엔 더 복잡한 시뮬레이션도 도전해보려고 한다.
차근차근 약점을 채워나가보자!
'이벤트 > 코드트리' 카테고리의 다른 글
| [코드트리 후기] 코딩테스트 준비, 갭체크로 내 약점부터 파악하기 (0) | 2026.06.15 |
|---|