Coding History

2024. 06. 27. 시험 문제 풀이

BlackBirdIT 2024. 6. 27. 22:50

암담한 결과다,, 하지만 하나 빼곤 풀었다. 마지막 문제는 내가 풀 수 있는 문제였는데 두번째 문제에서 너무 고민을 오래 하다가 시간을 못봐서 결국 두번째도 중간 과정까지만 냈고 세번째는 손도 못대버렸다 ㅠㅠ 이래서 시험 문제는 풀 수 있는거 먼저 해야된다. 내가 애초에 시험이랑 관련 없는 과를 8년이나 있다 보니까 시험이라는 것 자체가 너무 익숙하지 않았다. 그래도 뭐 이것도 경험이라고 생각한다. 아마 재시험을 보지 않을까 싶다. 그 때는 다 맞춰야지!

일단 첫번째 세번째 문제를 보고 두번째 문제는 풀이를 해야겠다.

  • 1번 문제
    import java.util.Scanner;
    

//1. 가로길이, 세로길이를 입력받아 사각형 넓이 만큼 별을 찍어내는 프로그램을 구현합니다(30점)

public class Main {

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

    System.out.print("별의 가로 길이를 입력해주세요. \n가로길이: ");

    int x = sc.nextInt();

    System.out.println("별의 가로길이 : " + x);

    System.out.print("별의 세로 길이를 입력해주세요. \n세로길이: ");

    int y = sc.nextInt();

    System.out.println("별의 세로길이 : " + y);

    System.out.println();

    System.out.println("가로길이 " + x + ", 세로길이 " + y + "의 사각형");
    System.out.println();

    for (int i = 0; i < y; i++) {
        for (int j = 0; j < x; j++) {
            System.out.print("*");
        }
        System.out.println();
    }
}

}

시간이 조금 걸리긴 했는데 푸는데 문제는 없었다.

- 세번째 문제

세번째 문제는 시험 제출 하고 5분 정도 걸려서 풀었다. 그니까 풀 수 있는거였는데 문제에 접근도 못했다 ㅋㅋㅋ
타임 아웃으로 제출을 못해서 결국엔 내가 틀린 문제다.

```java
//3. 프로그램은 정수 10개의 피보나치 수열 숫자를 출력합니다. 수열을 생성하기 위해 루프를 사용합니다. (40점)

public class Main {
    public static void main(String[] args) {
        int x = 10;

        for (int i = 0; i < x; i++) {

            System.out.print(Fibonacci(i) + " ");
        }
    }
    public static int Fibonacci(int n) {
        if (n == 0) {
            return 0;
        } else if (n == 1) {
            return 1;
        }
        return Fibonacci(n - 1) + Fibonacci(n - 2);
        }
   }

아무튼 이것도 재귀함수를 사용해서 풀 수 있는 문제다.

문제의 두번째 문젠데.. 이게 도저히 머리가 굴러가지가 않는다.

  • 두번째 문제

//양의 정수 n을 요청받아 숫자 패턴의 피라미드를 출력하는 프로그램을 구현합니다. 피라미드는 n 레벨을 가져야 하며,
//최상위 레벨에서 n부터 시작하여 맨 아래층에서 1까지 숫자가 감소해야 합니다.

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("입력한 정수 높이의 피라미드를 만들거예요");

        System.out.print("입력할 정수 : ");
        int x = sc.nextInt();

        System.out.println();

        for (int i = 0; x >= i; x--) {
            for (int j = i + 1; j < x; j++) {
                System.out.print(j + " ");
            }
            if (x == 0) {
                break;
            }
            System.out.println(x);
        }
    }
}
// 입력 3
// 출력
// 1 2 3
// 1 2
// 1
// 0

어떻게 대충 모양은 나오는 중인데 거기서 완전 멈춰버렸다. 저기까지는 좀 막 큰 문제 없이 썼는데, 그 다음 피라미드 모양을 만드는 데에서 완전히 꽉 막혀서 답이 나오질 않았다. 내 성격이 좀 하나 꽂히면 끝까지 잡고 늘어지는 성격이라 다음문제를 먼저 본다는 발상을 하지도 못한 채로 저거 붙잡고 있다가 5분 남았다는 소리 듣고 허겁지겁 깃에 올리고 제출 하고 3번 문제 복사 해와서 피보나치 수열 메서드 만들다가 타임아웃 됐다.

아무튼 저걸 풀어보자..

내 발상으론 공백을 만드는 print를 만들고 for문을 --로 감소하게 하면 되지 않을까 했는데 이상하게 그게 잘 안됐다. 저 코드는 보이는 바와 같이 순차적으로 감소하는 모양은 나오는데 내가, 또 시험이 원하는 피라미드 모양은 아니다. 계속 시도하다가 시간 거의 다 됐다는 말을 듣고 다시 부랴부랴 부분점수라도 받으려고 저거라도 출력 되는 모양 다시 만들고 제출 한 것이다. 마지막에 0도 없어야한다.

무튼 다시 시도하러 가보겠다.

for (int i = 0; x > i; x--) {

    for (int j = i + 1; j < x; j++) {
         System.out.print(j + " ");
         }
    System.out.println(x);
    }

0 없애는건 당연히 반복문 수정하면 되니까,, 바로 했고 이제 진짜 본론으로 공백을 어떻게 만드냐인데 반복문을 어디에 어떻게 넣어야될까. 문제 풀면서 진짜 다 해본 것 같은데 왜 안되는지 모르겠다. 다시 해봐야지 어쩌겠나.

아 지금 문제 읽어보니까 n부터 시작한다니까 맨 처음 숫자가 1이 되면 안되네? 애초에 틀렸구만 뇌가 절여졌었나보다.

다시 코드 수정 고고.

for (int i = 0; i < x; i++) {

            for (int j = 0; j < i; j++) {
                System.out.print(" ");
            }
            for (int k = x; k > i; k--) {
                System.out.print(k + " ");
            }
            System.out.println();
        }
    }
}

와 지금 어떻게 뒤집을지 몰라서 다 지우고 다시 그냥 했는데 거의 다 왔다. 지금 문제점은 출력할 때 앞자리가 계속 고정인데 문젠데 앞자리에 들어가는 변수만 -1씩 해주는 코드 넣으면 해결 될 것 같다.

음 일단 그렇게는 수정이 안되어서 계속 디버깅 하면서 k 쪽 변수를 수정해보면서 답을 찾아보았다.

for (int i = 0; i < x; i++) {
            for (int j = 0; j < i; j++) {
                System.out.print(" ");
            }
            for (int k = x - i; k > 0; k--) {
                System.out.print(k + " ");
            }
            System.out.println();
        }
    }
}

그렇게 해서 겨우 찾았다.. 0이랑 1이랑 x랑 i랑 겁나 싸웠다.

아무튼 시간을 들여서 계속 하다보니까 되는데 시험은 그럴 시간이 없다. 다른 사람들한테 물어보니까 3번 부터 풀고 2번 햇다던데, 어찌됐든 간에 그 사람들은 나보다 해결하는데 시간이 짧았고 문제도 전략적으로 잘 풀었다는 것 이니까. 아직 내가 많이 부족하다는 것을 다시 한번 통감한다. 더 열심히 해야지. 우역곡절 끝에 시작하게 됐는데 겨우 이런걸로 낙담할 시간이 없다. 더 열심히 해야지 어떡하겠냐.