boj 23326번 문제를 통해 보는 switch 문에서 맨 마지막 case의 break의 생략.
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 

 

COS Pro 2급 C 언어: 25.2 case에서 break를 사용하지 않을 때의 동작 알아보기

지금까지 각 case마다 break를 붙여주었는데 break가 없으면 어떻게 될까요? 앞의 소스에서 break를 모두 삭제합니다. switch_without_break1.c #define _CRT_SECURE_NO_WARNINGS // scanf 보안 경고로 인한 컴파일 에러

dojang.io

 

https://modoocode.com/16

 

씹어먹는 C 언어 - <9. 만약에... 2탄 (switch 문)>

 

modoocode.com

 

위 두가지 사이트의 내용 모두에서 찾아볼 수 있듯이, 

break; 문이 없다면 케이스로 들어가서 그 아래로 다른 케이스까지 쭉 진행되면서 코드들이 실행되게 되어있다. 

그렇기 때문에 중간중간에 break;를 두어서 다른 case의 코드가 실행되지 않도록 하는 것인데, 

이때에 case 3: 의 경우는 결국 이것이 마지막 case 이기 때문에 그 아래로 내려갈 영역의 다른 case 가 없어서 

그냥 그대로 break;를 제외하고 코드를 작성한것이 아닌가 싶다. 

실제로 내가 작성한 코드에서 break;를 첨부하고 문제를 제출해보아도 결국 똑같이 통과할 수 있었다. 

그래도 나는 만약 switch 문을 활용해서 코드를 작성하게 되는 경우, 맨 마지막 경우라도 하더라도 break를 넣어서 코드를 작성하는 습관을 들이도록 하자. 

그리고 case별로 나누고, 그 각각의 케이스 모두를 제외한 나머지 경우 다 인 경우 실행할 코드를 나타낼때에는, 

defalut : 를 사용하는걸 기억하고 사용하도록 하자. 

그런데 지금까지 코딩테스트 공부를 하면서 switch문을 활용하는 코드를 쉽사리 만나지는 못했던것 같다. 

그리고 이 코드의 경우도 if문을 통해서도 수정할 수 있을것 같다. 

하지만 이 문제를 통해서 switch문을 사용해볼 수 있는 좋은 기회를 가졌고, 관련 내용을 공부해볼 수 있었다. 

 

  Comments,     Trackbacks