2018년 새해가 되면서 저에게는 또다른 책임감이 주어지네요.^^
다름 아닌 저를 믿고 따라와 주는 학생들이 정보올림피아드라는 대회를 고대하고 있기 때문이랍니다.
이 학생들이 모두 좋은 성과가 나와 주면 저에게는 너무나 감사한 일이지만...
세상일이라는것이 모두다 제 마음 같지만은 않다보니 마음의 짐이 무거워 질수 밖에 없네요.
그래도 제가 해 줄수 있는 것은 학생들이 최선을 다해서 자신이 준비한 노력 만큼의 성과는 나올 수 있게 준비를 시켜 주는것이 제 역할이 아닌가 싶어요.
오늘은 작년에 출제된 지역대회 예선 중등부 18번 문제를 풀어 보도록 하겠습니다.
문제는 다음과 같습니다.
C나 C++ 언어로 작성된 아래 식들 중에서값이 다른 것은 무엇인가? ① 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번이 되겠네요.
'강의자료 > 정보영재' 카테고리의 다른 글
세줄로 타일깔기 (2) | 2018.02.09 |
---|---|
SW사고력 올림피아드 중등부 대상 답안 예시를 바라보며... (2) | 2018.01.25 |
2017년 정보올림피아드 전국본선문제 초2번 중1번 방배정하기 (3) | 2017.12.12 |
정보올림피아드 지역대회 2017년 중등부 12번 문제 풀이 (4) | 2017.12.01 |
2005년 정보올림피아드 예선 중등 1번 문제 풀이 (1) | 2017.11.23 |