Notice
Recent Posts
Recent Comments
Link
04-27 12:54
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

<<개발일지>>

[배열] 1. 큰 수 출력하기 본문

코딩테스트

[배열] 1. 큰 수 출력하기

개발하는지호 2023. 12. 8. 22:01
1. 큰 수 출력하기
 

설명

N개의 정수를 입력받아, 자신의 바로 앞 수보다 큰 수만 출력하는 프로그램을 작성하세요.

(첫 번째 수는 무조건 출력한다)

입력

첫 줄에 자연수 N(1<=N<=100)이 주어지고, 그 다음 줄에 N개의 정수가 입력된다.

출력

자신의 바로 앞 수보다 큰 수만 한 줄로 출력한다.

예시 입력 1 

6
7 3 9 5 6 12

예시 출력 1

7 9 6 12

 

 

<<풀이>>

 

우선 나의 풀이이다.

import java.util.Scanner;
import java.util.Stack;

class Main {
    public int[] solution(int[] str) {
        Stack<Integer> stack = new Stack<>();
        stack.push(str[0]);
        for (int i = 0; i < str.length - 1; i++) {
            if (str[i] < str[i + 1]) stack.push(str[i+1]);
        }

        int stackSize = stack.size();
        int[] answer = new int[stackSize];
        for (int i = stackSize - 1; i >= 0 ; i--) {
            answer[i] = stack.pop();
        }
        return answer;
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] str = new int[n];
        for (int i = 0; i < n; i++) {
            str[i] =  in.nextInt();
        }
        int total = T.solution(str).length;

        for (int i = 0; i < total; i++) {
            System.out.print(T.solution(str)[i] + " ");
        }

    }
}

 

시간 복잡도는 N

 

활용 

내장 클래스 Stack 

 

사고 흐름

1. 출력이 정수이고 띄어쓰기 형태로 되는 걸 보니, 정수 배열을 반복문으로 돌리면서 띄어쓰기를 더하여 출력하면 되겠구나 

2. 그럼 메서드에서 리턴된 값을 정수 배열형태로 가져와야겠다.

3. 스택을 활용하자

4. 맨 앞의 값은 무조건 들어가니 미리 스택에 넣어두자

5. 나머지 앞 수와 비교했을 때 크면 스택에 넣자

6. 가장 큰 인덱스 부터 반복문 돌려서 스택에서 pop시키자.

 

강사님 풀이

import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;

class Main {
    public ArrayList<Integer> solution(int n, int[] str) {
        ArrayList<Integer> answer = new ArrayList<>();
        answer.add(str[0]);
        for (int i = 1; i < n; i++) {
            if (str[i] > str[i - 1]) answer.add(str[i]);
        }
        return answer;
    }


    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] str = new int[n];
        for (int i = 0; i < n; i++) {
            str[i] =  in.nextInt();
        }
        for(int x : T.solution(n, str)) {
            System.out.println(x + " ");
        }

    }
}

 

강사님은 ArrayList를 활용하고 향상된 반복문을 활용해서 코드를 경량화 했다.

이번에도 여러가지 풀이 방법이 있다는 걸 느낀다. 더 숙달해서 더 효율적인 코드를 짤 수 있도록 노력하자.

'코딩테스트' 카테고리의 다른 글

[배열] 3. 가위 바위 보  (0) 2023.12.12
[배열] 2. 보이는 학생  (0) 2023.12.10
[문자열] 12. 암호  (1) 2023.12.07
[문자열] 11. 문자열 압축  (1) 2023.12.07
[문자열] 10.가장 짧은 문자거리  (1) 2023.12.03