본문 바로가기

정보올림피아드지역예선

정보올림피아드 초등 - 지역예선] 2008년도 31번문제

반응형

 

 

이미지에서

for(i = 1; i<=n; i++) {

fscanf(fin,"%d",&a); <-- 이부분이 빠져 있음

operation(a);

}

 

문제풀이) 알고리즘을 이해 하고 문제를 풀어 나간다.

먼저 변수의 값을 이해 한다.

n 의 값은 스위치 갯수 예제에서는 8의 값이 들어 옴

s 는 현재 스위치의 상태

예제에서는 다음과 같은 값이 들어 옴

s

 1

 1

 1

 0

 1

 0

 1

m 은 학생 수 예제에서는 1

a 는 학생에게 주어지는 스위치 번호 예에서는 3

 

operation(a) 가 수행 하는 일은

스위치번호가 주어지면 자기 자신을 기점으로 왼쪽과 오른쪽으로 한칸씩 나가면서 대칭인 수의 값을 변경 하는 것임

따라서 temp 의 값은 자신을 기준으로 좌우측으로 몇칸을 계산해야 하는지 그 값을 받는다.

가령 학생이 숫자가 1을 받은 경우 왼쪽으로 한칸도 비교 할 수 없기때문에 temp 의 값은 0 이며 8을 받은 경우 오른쪽으로 한칸도 비교 할 수 없기 때문에 temp 의 값은 0 이다.

이것을 표로 나타내 보면 다음과 같다.

 받은번호(x)

 1

 2

 3

 4

 5

 6

 7

 8

 temp

 0

 1

 2

 3

 3

 2

 1

 0

따라서 이 값을 만족하기 위해서는

 x - 1

 n - x

의 값이 입력 되어야 함

31번 정답) 4번

32번은 앞뒤를 바꾸는 것인데

① ~ ④ 은 s(x - i) 의 값과 s(x + i) 의 값이 같으므로 모두 성립함

s(x + i) = !s(x - i)  <-- 여기서 s(x + 1) 의 값이 변경 되었는데...

    s(x - i) = !s(x + i)  <-- 다시 s(x+i) 의 값을 변경 하여 넣으므로 s(x-i) 의 값은 원래 값으로 되돌아감

32번 정답) 5번

 

 

 

 

 

반응형