JAN's History
8주차_백준 문제풀이 본문
목차
1. 문제 17413
2. 문제 10989
3. 문제 1110
1. 문제 17413
풀이
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String S = sc.nextLine();
Stack<Character> stk = new Stack<>();
//<> 안에 안에 있는지 밖에 있는지 구분
//안이면 true, 밖이면 false
boolean inout = false;
//S를 하나씩 탐색
for (int i = 0; i < S.length(); i++) {
//'<'이게 오면
if (S.charAt(i) == '<') {
inout = true; // 태그 안
//스택에 저장되어 있는거를 다 pop하면서 출력
while (!stk.isEmpty()) {
System.out.print(stk.pop());
}
//'<'기호 표시
System.out.print(S.charAt(i));
}
//'>' 이게 오면
else if(S.charAt(i)=='>') {
inout = false;
System.out.print(S.charAt(i));
}
// <>안에 있으면
else if(inout) {
//순서 그대로 출력
System.out.print(S.charAt(i));
}
// <>밖에 있으면
else if(!inout) {
//공백이라면
if(S.charAt(i)==' ') {
//스택에 저장되어 있는거를 다 pop하면서 출력
while (!stk.isEmpty()) {
System.out.print(stk.pop());
}
//공백 출력
System.out.print(S.charAt(i));
}
//공백이 아니면
else {
//스택에 넣기
stk.push(S.charAt(i));
}
}
}
//나머지 스택에 저장되어 있는거를 다 pop하면서 출력
while (!stk.isEmpty()) {
System.out.print(stk.pop());
}
}
}
기본설명
- 문자열을 거꾸로 출력하는 것은 Stack을 활용하면 된다.
- 그리고, 태그 안과 밖을 구분하는 boolean형 변수를 하나 만들어서 태그 안에 있으면 true, 밖이면 false로 둔다.
- 먼저, '<'이 오면 Stack에 저장되어 있는 것들을 먼저 다 출력한다. Stack이 빌 때까지.
- '>'이 오면 그대로 출력
- 태그 안에 있으면 문자열을 그대로 출력
- 태그 밖에 있으면서 공백이 오면 스택에 있는 것들을 빌 때까지 pop하여 출력하고, 공백이 아니면 스택에 push를 한다.
2. 문제 10989
풀이
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int[] array = new int[N];
for(int i = 0 ; i < N ; i++) {
array[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(array);
for(int i = 0 ; i < N ; i++) {
bw.write(String.valueOf(array[i]) + "\n");
}
br.close();
bw.flush();
bw.close();
}
}
Arrays.sort()를 사용!
3. 문제 10989
풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int cnt = 0;
int copy = N;
do {
N = ((N % 10) * 10) + (((N / 10) + (N % 10)) % 10);
cnt++;
} while (copy != N);
//copy와 N이 같을때 종료
System.out.println(cnt);
}
}
기본설명
먼저 N 이라는 정수가 주어진다고 가정하자.
그러면 N의 1의 자릿수는 새로운 수의 10의 자리로,
N의 1의 자릿수와 10의 자릿수를 더한 값의 1의 자릿수는 새로운 수의 1의 자리로 가면 된다.
(만약 N 이 한 자릿수 정수라면 앞에 0을 붙여서 더한다.)
즉 아래의 위와 같은 구조다.
먼저 주어진 수를 N 이라 하고 새로운 수를 T로 가정한다.
먼저 주어진 수 N의 일의 자릿수는 새로운 수(T)의 십의 자릿수로 간다.
즉 10으로 나눈 나머지 값에 10을 곱하면 T의 십의 자릿수가 된다.
각 자리수의 합은 먼저 N의 십의 자릿수는 나누기 10 을 하면 N이 한 자릿수이면 0,
그 외에는 십의 자릿수가 그대로 반환된다.
그리고 N의 일의 자릿수는 나머지인 % 을 쓰면 된다.
이 두개를 더한 뒤 10으로 나눈 나머지가 N의 각 자릿수의 합의 일의 자릿수가 T의 일의 자릿수가 되겠다.
이를 합친 while문을 작성하면
위와 같은 그림이 된다.
여기서 주의해야할 점은 T를 새로운 수로 가정했는데, 실제로는 반복문에서 N 값을 계속 새로운 값으로 대체해주어야 하는 것이니 T 를 N으로 고친다.
'백준' 카테고리의 다른 글
10주차_백준 문제풀이 (0) | 2023.07.09 |
---|---|
9주차_백준 문제풀이 (0) | 2023.06.24 |
7주차_백준 문제풀이 (0) | 2023.05.28 |
6주차_백준 문제풀이 (0) | 2023.05.21 |
5주차_백준 문제풀이 (1) | 2023.05.14 |