알고리즘(이충기 교수)

알고리즘 0주차(사전 평가시험)

유민기 2023. 9. 7. 22:33

1주차에 조를 짜기위한 사전 평가 시험을 치뤘다. 

사전 평가 때 치뤘던 문제를 복습겸 분석해보려한다.

1. 다음 코드에서 while 문의 수행이 끝났을 때 count 변수와 mystery변수의 값은 각각 얼마인가?

package 이충기;

public class 사전평가시험1 {
           public static void main(String[] args){
                        int count = 0;
                        int mystery = 1;
                        while(count < 5){
                                  count++;
                                  mystery = mystery * count;
                        }
                        System.out.printf("%d %d",count, mystery);
           }
}


간단한 문제이다. count = 0, mystery = 1인 상태에서 문제를 풀면된다.

반복문 while문에서 count < 5가 될 때까지 반복한다.

count < 5일 경우 Count++를 해준 뒤, mysery * count를 해주면된다.

그럼 0일경우부터 차례대로 값을 넣어보자.

count = 5가 될경우 while문을 빠져나오므로

최종적으로 count = 5, mystery = 120을 저장하고 출력함을 알 수 있다.

------------------------------------------------------------------------------------------------------

2. 31명의 용의자가 한줄로 서있다. 이 중 1명이 범인이다. 모든 용의자는 누구인지 알고 있습니다. 한 용의자를 선택하여 "범인은 누구입니까?"라고 물을 때 다음 중 하나로 대답한다.

1. 범인은 나다.

2. 범인은 나보다 왼쪽에 있다.

3. 범인은 나보다 오른쪽에잇다.

이 경우 탐정이 범인을 찾기 위해 물어봐야 하는 최소 횟수와 최대횟수는 각각 얼마인가? 

사실 이 문제는 약간의 오류가 있지만 교수가 의도한 해설에 따르면 위와 같다.

최솟값은 당연히 1이고 최댓값은 31명의 범인의 가운데 사람을 기준으로 나눴을 때 범인을 찾는다.

if/else 조건문을 돌려서 범인이 없는경우 또 범인들중 반으로 나눠서 범인을 찾는다.

위의 과정을 거쳐서 최댓값을구하면 최솟값 = 1 최댓값 = 4가 나온다.

 

------------------------------------------------------------------------------------------------------

 

3. 다음 함수(메소드)를 fun(3)로 호출할 때 출력되는 결과를 적어라.

public class 사전평가시험3 {
            public static void main(String[] args) {
            int n = 3;
            fun(n);
       }
       public static void fun(int n) {
              if (n < 1) {
                  System.out.print('B');
               }
               else {
                    fun(n - 1);
                    System.out.print('R');
                }
         }
}

fun(3)의 결과값을 구하는 문제이다.

fun 메소드의 조건문을 보면 n < 1일경우 B를 출력하며, 

n > 1 일 경우 fun(n - 1)한 뒤 R을 출력한다.

if문을 수행한 뒤, else문을 수행하므로 결과값은 "BRRR" 이 됨을 알 수 있다.

------------------------------------------------------------------------------------------------------

4. 다음 코드의 출력 결과를 적어라.

public class 사전평가시험4 {
        public static void main(String[] args){
              for(int i=0; i <= 3; i++){
                    for(int j=0; j < i; j++){
                         System.out.print(j + " ");
                    }
             }
       }
}

i =0 -> x

i =1 -> 0

i = 2 -> 001

i = 3 -> 001012

최종적으로 001012가됨을 알 수 있다.