강의실/정보영재

2018년 새해가 되면서 저에게는 또다른 책임감이 주어지네요.^^


다름 아닌 저를 믿고 따라와 주는 학생들이 정보올림피아드라는 대회를 고대하고 있기 때문이랍니다.


이 학생들이 모두 좋은 성과가 나와 주면 저에게는 너무나 감사한 일이지만...


세상일이라는것이 모두다 제 마음 같지만은 않다보니 마음의 짐이 무거워 질수 밖에 없네요.


그래도 제가 해 줄수 있는 것은 학생들이 최선을 다해서 자신이 준비한 노력 만큼의 성과는 나올 수 있게 준비를 시켜 주는것이 제 역할이 아닌가 싶어요.


오늘은 작년에 출제된 지역대회 예선 중등부 18번 문제를 풀어 보도록 하겠습니다.


문제는 다음과 같습니다.


 

  CC++ 언어로 작성된 아래 식들 중에서값이 다른 것은 무엇인가?

      ①    373&1<<1 ② 373&1<<3 ③ 373&1<<5 ④ 373&1<<7 ⑤ 373&1<<9

    



2017년에는 계산할때 우선순위 부분에 해당하는 부분이 두문제나 출제 되었네요.


위의 문제에서 & 와 << 연산의 우선 순위를 묻는 문제 이거든요...


처음 접하게 되면 순간적으로 & 연산을 먼저 계산하고 << 연산을 하게 될 수가 있는데요.


이런 문제는 혹시라도 우선순위를 잊었다고 해도 그렇게 계산했을때 5개의 정답이 모두 다른것이라는 것을 금방 확인할 수가 있기 때문에 << 연산이 먼저 계산 되어야 한다는 것을 쉽게 확인 할 수가 있었습니다.


이 문제를 풀면서 연산할때 우선 순위를 한번 살펴 보겠습니다.

우선순위는 크게는 산술연산 -> 관계연산 -> 논리연산 으로 계산이 됩니다.


아래 표에서는 더욱더 세분화 해서 살펴 볼수가 있을것 같은데요. 


1순위에서는 소괄호가 가장 먼저일것입니다. 그것을 제외하면 자기 자신의 내부를 가르키는 배열 [], 간접접근 ->, 직접접근 . ,등이 있을수 있겠구요... 예상외로 ++,-- 처럼 후위증가 후위감소가 1순위에 랭킹이 되어 있네요. 전위증가,전위감소 가 더 빠를 줄 알았는데요... 

하지만 전위증가와 후위증가를 동시에 같이 사용할 일은 없기 때문에 헷갈릴 일은 없을것 같습니다.


2순위에서는 전위증가,전위감소,sizeof,비트연산 Not(~), 논리 Not(!), 부호(+/-), 주소연산(&),포인트(*) 등이 있습니다. 

논리 연산이 우선순위가 낮다고 이해하고 있는데... 여기서 논리 Not 은 제외가 되는 군요.


3순위,4순위에서 산술연산이 있구요.

5순위에 쉬프트연산(<<,>>) 이 있습니다.

6,7순위에 관계연산

8순위에 비트연산

9순위에 논리연산

10순위에 삼항연산

11순위에 대입연산입니다.


산술연산->쉬프트연산->관계연산->비트연산->논리연산 식으로 알아 두면 좋을것 같습니다.


우선순위를 알아 보았으니 문제를 풀어 보도록 하겠습니다.


373 을 이진수로 표현하면 101110101 입니다.

1) 1<<1 은 10

2) 1<<3 은 1000

3) 1<<5 은 100000

4) 1<<7 은 10000000

5) 1<<9 은 1000000000

모두 연산을 하면  0 인데 3) 인 경우에만 100000 이 됩니다.


따라서 정답은 3번이 되겠네요.


정보올림피아드 문제 풀이 리스트 정리





이 장소를 Daum지도에서 확인해보세요.
인천 서구 당하동 1028-2 장원프라자 502호 | 원당컴퓨터학원
도움말 Daum 지도
2 0
  • 버블프라이스 2018.01.11 20:50 신고    

    지난 정보올림피아드라는 대회 중등부 18번 문제 풀이 및 정답을 공유해주셔서
    이 대회를 준비하고 계신 학생분들께 많은 도움이 될 것 같습니다.^^
    한파 날씨가 계속 이어지고 있습니다. 건강관리 잘하시길 바랍니다.

  • 핑구야 날자 2018.01.12 06:56 신고    

    정보 올림피아드 준비하는 학생들에게 도움이 되겠어요