강의영상

- (1/3) 2007년(나) 9월/평가원 16(고3) 풀이 (1)

- (2/3) 2007년(나) 9월/평가원 16(고3) 풀이 (2)

- (3/3) 2007년(나) 9월/평가원 16(고3) 풀이 (3), for+break, while, 과제설명

2007(나) 9월/평가원 16(고3)

자연수 $n$에 대하여 점 $P_n$을 다음 규칙에 따라 정한다.

(가) 점 $P_1$의 좌표는 $(1,1)$이다.

(나) 점 $P_n$의 좌표가 $(a,b)$일때,

  • $b<2^a$이면 점 $P_{n+1}$의 좌표는 $(a,b+1)$이고
  • $b=2^a$이면 점 $P_{n+1}$의 좌표는 $(a+1,1)$이다.

점 $P_n$의 좌표가 $(10,2^{10})$일 때, $n$의 값은?

(1) $2^{10}-2$

(2) $2^{10}+2$

(3) $2^{11}-2$

(4) $2^{11}$

(5) $2^{11}+2$

(풀이전략)

- $P_1$로부터 $P_2$를 구한다.

- $P_2=(10,2^{10})$인지 체크

  • 맞다면 $n=2$
  • 아니라면 아래를 진행

- $P_2$에서 $P_3$을 구한다.

- $P_3=(10,2^{10})$인지 체크

  • 맞다면 n=3
  • 아니라면 아래를 진행

- ...

그래서 아래와 같은 로직이면 좋겠다.

- for $n=1,2,\dots, 2^{11}+2$까지 아래를 반복함 (단, $P_n=(10,2^{10})$인 경우에는 반복중지)

if Pn==(10,2^(10)) 인 경우: 
    반복문 탈출 
else 
    반복할내용

(풀이)

a=c()
b=c()
a[1]=1
b[1]=1
for(n in 1:2^12){
    if ((a[n]==10)&(b[n]==2^10)){
        print(n)
        break
    }else{
        ## 탈출못했을때 실행되는 코드 (실질적인 문제풀이
        if(b[n]<2^(a[n])){
            a[n+1]=a[n]
            b[n+1]=b[n]+1
        }else{
            if(b[n]==2^(a[n])){
                a[n+1]=a[n]+1
                b[n+1]=1
            }
        }    
    }
}
[1] 2046
c(2^10-2 , 2^10+2 , 2^11-2 , 2^11 , 2^11+2)
[1] 1022 1026 2046 2048 2050

답은 3번

반복문을 적당한 조건하에만 수행하는 방법

(1) 방법1: for + break 를 적절하게 활용

(2) 방법2: while 을 이용

x= -5 
while(x<0){
    print('x는음수') 
    x= x+1 
}
[1] "x는음수"
[1] "x는음수"
[1] "x는음수"
[1] "x는음수"
[1] "x는음수"

숙제

- for + break를 활용하여 위와 같은 결과가 나오도록 코드를 작성하라.

for (x in -5:10){
    if (????){
        break
    }else{
        print('x는음수')
        #x=x+1
    }        
}
[1] "x는음수"
[1] "x는음수"
[1] "x는음수"
[1] "x는음수"
[1] "x는음수"