백준 10828 ⬇
[접근방식]
Stack API 를 사용하기보단, 직접 구현을 해서 문제를 풀었습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 스택 10828문제
public class Boj_10828 {
private int max;
private int ptr;
private int [] stk;
public Boj_10828(int capacity) {
ptr = 0;
max = capacity;
stk = new int[max];
}
public void push (int input) {
stk[ptr++] = input;
}
public int pop() {
if(ptr <= 0) return -1;
return stk[--ptr];
}
public int top() {
if (ptr <= 0)
return -1;
return stk[ptr-1];
}
public int size() {
return ptr;
}
// 안 비어있으면, 0 비어있으면 1
public int empty() {
if (ptr <= 0) return 1;
else return 0;
}
public static void main(String [] arg) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int capacity = Integer.parseInt(br.readLine());
Boj_10828 sk = new Boj_10828(capacity);
while(capacity > 0) {
int input;
st = new StringTokenizer(br.readLine(), " ");
switch (st.nextToken()) {
case "push":
input = Integer.parseInt(st.nextToken());
sk.push(input);
break;
case "pop":
System.out.println(sk.pop());
break;
case "size":
System.out.println(sk.size());
break;
case "empty":
System.out.println(sk.empty());
break;
case "top":
System.out.println(sk.top());
break;
}
capacity--;
}
}
}
백준 9093 ⬇
[접근방식]
입력한 값 데이터를 받아서 sentence => words => word로 분할하여
word 를 뒤에서부터 글자 하나씩 뽑아서 저장하였습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 단어뒤집기 9093번
public class Boj_9093 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int cnt = Integer.parseInt(br.readLine());
String [] sentence = new String[cnt];
for(int i = 0; i < cnt; i++) {
sentence[i] = br.readLine();
}
for (int i = 0; i < cnt; i++) {
String word = "";
String [] words = sentence[i].split(" ");
for (int j = 0; j < words.length; j++) {
for (int k = words[j].length(); k > 0 ; k--) {
word += words[j].charAt(k-1);
}
word += " ";
}
System.out.println(word);
}
}
}
백준 9012 ⬇
[접근방식]
첫 번째 접근(실패)
1. 처음은 '(' , 끝은 ')' 로 끝나야합니다.
2. ')'와 '('는 숫자가 동일해야합니다.
3. 괄호는 무조건 짝수여야합니다. ( 이 방식으로 했을 시, 2번에서 이슈가 발생합니다)
두 분째 접근(성공)
1. 앞선 첫 번째 방식의 2번을 해결하기 위해서 변수를 하나 줄이고, if문 하나를 더 추가했습니다. (if else 로 카운트+-를 해줍니다)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 괄호 9012 문제
public class Boj_9012 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int cnt = Integer.parseInt(br.readLine()); // 몇 개를 입력할지 수를 나타냅니다.
String [] array = new String[cnt]; // 괄호를 몇개 받을지 미리 공간할당해줍니다.
for (int i = 0; i < cnt; i++) {
array[i] = br.readLine(); // 1. 괄호를 담아줍니다.
}
for (int i = 0; i < cnt; i++) { // 2. 괄호 한 줄씩 비교로직을 시작합니다. (하나의 괄호 문자열의 길이는 2 이상 50 이하이다)
int chk = 0;
String [] word = array[i].split(""); // 3. 한 줄의 괄호를 하나씩 뽑습니다.
// 이 로직은 (시작일땐 +, )닫아야할땐 - 즉, 한쌍이 되게끔하는 로직입니다.
for (int k = 0; k < word.length; k++) {
if(chk >= 0) {
if ("(".equals(word[k])) {
chk++;
} else if (")".equals(word[k])) {
chk--;
}
}
}
// 쌍이 잘 맞을 경우는 chk 된 데이터가 0이어야하고,
if (chk == 0) {
System.out.println("YES");
// 쌍이 잘 맞지 않을 경우, chk 된 데이터가 0이 아닐겁니다.
}else {
System.out.println("NO");
}
}
}
}
'PS > 백준' 카테고리의 다른 글
[백준 *Java] - 가장 긴 증가하는 부분 수열 (11053) (0) | 2022.03.21 |
---|---|
[백준 *Java] - 이친수 (2193) (0) | 2022.03.21 |
[백준 *Java] - 에디터 (1406) (0) | 2022.03.18 |
[백준 *Java] - 2*n 타일링 (11726) (0) | 2022.03.18 |
[백준 *Java] - 1로만들기(1463) (0) | 2022.03.18 |