오랜만에 백준에서 switch case 구문을 사용하게 되었다.
보통 if else를 주로 사용하는 탓에 겨우 구조를 만들어낼 수 있었다.
모든 코드를 작성한 후, 결과값을 출력하는데 출력이 올바르지 않은 경우가 존재했다.
아무리 봐도 코드엔 이상이 보이지 않았고, 단축키 F10을 눌러 직접 한 줄 한 줄 디버깅을 하기 시작했다.
1. 문제점
case로 들어갈 때, 이상한 점을 발견했다.
작성한 코드는 case안에 if가 존재하는 구조였는데, 해당하는 case로 들어가 if구문이 올바르지 않을 경우 다음 case로 바로 이동하게 되는 문제가 있었다.
2. 실제 코드
switch (cro[i]) {
case 'n':
if (cro[i + 1] == 'j') {
i++;
}
case 's':
if (cro[i + 1] == '=') {
k++;
}
}
입력값: n=
예상 출력값: case 'n'으로 들어가 if문을 만나게 된다. 입력값처럼 cro[i+1]이 j가 아닌 =이기에 switch구문을 탈출하게 된다.
실제 출력값: case 'n'으로 들어가 if문을 만나게 된다. if문이 성립하지 않기에 지나가고 다음 case로 이동해 if문을 만나게 된다. cro[i+1]은 =이기에 if문이 성립해 k값이 증가하게 된다.
3. 문제점 해결
switch case에서 해당 case가 성립하지 않는다면 다음 case로 이동하게 되는 성질이 있다.
본인이 작성한 코드에선 해당 case가 성립하지 않으면 바로 빠져나오길 원하기에 모든 case에 break를 넣어주었다.
4. 해결 코드
switch (cro[i]) {
case 'c':
if (cro[i + 1] == '=' || cro[i + 1] == '-') {
i++;
}
break;
case 'd':
if (cro[i + 1] == '-') {
i++;
}
else if (cro[i + 1] == 'z' && cro[i + 2] == '=') {
i += 2;
}
break;
case 'l':
if (cro[i + 1] == 'j') {
i++;
}
break;
case 'n':
if (cro[i + 1] == 'j') {
i++;
}
break;
case 's':
if (cro[i + 1] == '=') {
i++;
}
break;
case 'z':
if (cro[i + 1] == '=') {
i++;
}
break;
}
5. 실제 깃허브에 있는 코드 원본
GitHub - minjeongss/Algorithm: 알고리즘 문제 풀이 Repository 🚀
알고리즘 문제 풀이 Repository 🚀. Contribute to minjeongss/Algorithm development by creating an account on GitHub.
github.com
'프로그래밍 - 활용 > 에러' 카테고리의 다른 글
[Eclipse] 콘솔 한글깨짐 해결하기(UTF-8이 작동되지 않는 상황) (0) | 2023.02.13 |
---|---|
[Eclipse] Eclipse Java Project 생성 시 발생한 에러 해결하기 (0) | 2022.12.26 |
[GitBlog] No such file or directory - git ls-files -z. Bundler cannot continue. 에러 해결하기 (0) | 2022.05.19 |
[Unity/2D] Button의 On click()에서 함수가 뜨지 않는 상황 (0) | 2022.03.21 |