switch (t) {
case 1:
cin >> t;
if (hu.find(t) != hu.end())
hu.erase(t);
else
hu.insert(t);
break;
case 2:
cin >> t;
curr = (curr + t - 1) % N + 1;
break;
case 3:
if (hu.empty()) cout << -1 << '\n';
else {
auto it = hu.lower_bound(curr);
if (it != hu.end())
cout << *it - curr << '\n';
else
cout << N - curr + *hu.begin() << '\n';
}
}
내가 접한 참고 코드의 경우 위와 같이 맨 마지막 case 3: 에서 break;를 제외한 형태의 코드를 발견하였다.
이와 관련하여서 switch 문에서 break가 없다면 어떻게 되는지에 대해서 찾아보았는데,
https://dojang.io/mod/page/view.php?id=2144
위 두가지 사이트의 내용 모두에서 찾아볼 수 있듯이,
break; 문이 없다면 케이스로 들어가서 그 아래로 다른 케이스까지 쭉 진행되면서 코드들이 실행되게 되어있다.
그렇기 때문에 중간중간에 break;를 두어서 다른 case의 코드가 실행되지 않도록 하는 것인데,
이때에 case 3: 의 경우는 결국 이것이 마지막 case 이기 때문에 그 아래로 내려갈 영역의 다른 case 가 없어서
그냥 그대로 break;를 제외하고 코드를 작성한것이 아닌가 싶다.
실제로 내가 작성한 코드에서 break;를 첨부하고 문제를 제출해보아도 결국 똑같이 통과할 수 있었다.
그래도 나는 만약 switch 문을 활용해서 코드를 작성하게 되는 경우, 맨 마지막 경우라도 하더라도 break를 넣어서 코드를 작성하는 습관을 들이도록 하자.
그리고 case별로 나누고, 그 각각의 케이스 모두를 제외한 나머지 경우 다 인 경우 실행할 코드를 나타낼때에는,
defalut : 를 사용하는걸 기억하고 사용하도록 하자.
그런데 지금까지 코딩테스트 공부를 하면서 switch문을 활용하는 코드를 쉽사리 만나지는 못했던것 같다.
그리고 이 코드의 경우도 if문을 통해서도 수정할 수 있을것 같다.
하지만 이 문제를 통해서 switch문을 사용해볼 수 있는 좋은 기회를 가졌고, 관련 내용을 공부해볼 수 있었다.