Notice
Recent Posts
Recent Comments
Link
04-27 12:54
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 로드밸런스
- https
- 우리에프아이에스 #
- spring
- Gradle
- springboot
- 우리FIS아카데미 #
- K-디지털트레이닝
- 우리FISA
- 맥OS
- 클라우드 서비스 개발 #
- 클라우드 서비스 개발
- 우리FIS아카데미
- dbeaver
- M2
- 우리FISA #
- AWS
- 맥북
- jdk
- 도메인
- mysql
- 리눅스
- 맥
- sts
- route 53
- 글로벌소프트웨어캠퍼스
- 우리에프아이에스
- HTTP
- Java
Archives
- Today
- Total
<<개발일지>>
[배열] 1. 큰 수 출력하기 본문
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 |