10250번
나머지와 몫을 활용하는 문제로 나머지가 0이 될 때만 주의해주면 된다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int test = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for(int i = 0; i<test; i++) {
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int h = Integer.parseInt(st.nextToken());
int w = Integer.parseInt(st.nextToken());
int n = Integer.parseInt(st.nextToken());
String hotel;
if(n%h ==0) { // 나머지가 0이 될 때 손님은 h층 방을 배정 받아야 한다
hotel = h + String.format("%02d", (n/h));
} else {
hotel = n%h + String.format("%02d", (n/h)+1);
}
sb.append(hotel+"\n");
}
System.out.println(sb);
}
}
2910번
LinkedHashMap을 사용하면 입력된 순서대로 데이터를 관리할 수 있다
수열의 숫자들을 key로 하고 해당 숫자들의 빈도수를 value로 한다
comparator를 구현하여 빈도수를 내림차순으로 정렬
key 값을 for문을 이용하여 value번 반복하여 출력한다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int n = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine(), " ");
Map<Integer,Integer> map = new LinkedHashMap<>();
for(int i = 0; i<n; i++) {
int num = Integer.parseInt(st.nextToken());
if(map.containsKey(num)) {
map.put(num, map.get(num)+1);
} else {
map.put(num,1);
}
}
List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
@Override
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
return o2.getValue()-o1.getValue(); // 내림차순 정렬
}
});
for(int i = 0; i<map.size(); i++) {
for(int j = 0; j<list.get(i).getValue(); j++) {
sb.append(list.get(i).getKey()+" ");
}
}
System.out.println(sb);
}
}
4949번
스택을 사용하는 문제로 예전에 푼 괄호 문제를 좀 더 응용한 거 같다
괄호가 아닌 문자의 경우 무시
괄호 문자인지 판단하고 괄호가 아닌 문자의 경우 무시
여는 괄호인지, 닫는 괄호인지를 판단하며, 닫는 괄호 일 경우 "]" 의 경우는 "[" 과 매칭되어야 하고, ")" 의 경우는 "(" 과 매칭
괄호의 짝을 맞춰야 한다는 것이 제일 중요하다!!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Practice {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true) {
String str = br.readLine();
String [] str1 = str.split("");
Stack <String> st = new Stack<>();
boolean check = true;
if(str.equals(".")) {
break;
}
for(int i = 0; i<str1.length; i++) {
if(str1[i].equals("(") || str1[i].equals("[")) {
st.push(str1[i]); // 여는 괄호면 스택에 저장
} else if(str1[i].equals(")")) { // 닫는 괄호 ")"일 때 조건이 필요
if(!st.empty() && st.peek().equals("(")) {
st.pop(); // "("과 괄호의 짝이 맞는 ")"만 pop 가능하게 함
} else { // 스택이 비어있거나 pop 할 원소가 소괄호랑 매칭이 안되는 경우
check = false;
break;
}
} else if(str1[i].equals("]")) { // 닫는 괄호 "]"일 때 조건이 필요
if(!st.empty() && st.peek().equals("[")) {
st.pop(); // "["과 괄호의 짝이 맞는 "]"만 pop 가능하게 함
} else { // 스택이 비어있거나 pop 할 원소가 소괄호랑 매칭이 안되는 경우
check = false;
break;
}
}
}
if(!st.empty() || !check) {
System.out.println("no");
} else {
System.out.println("yes");
}
}
}
}
'백준 문제 풀이' 카테고리의 다른 글
DFS와 BFS > 10026번, 1012번 (0) | 2022.08.02 |
---|---|
다익스트라 > 1916번, 1238번 (0) | 2022.08.01 |
2470번(투 포인터), 5568번(조합) (0) | 2022.07.25 |
18115번(덱), 2798번, 1929번(소수) (0) | 2022.07.22 |
10799번(스택), 10816번(이진 탐색), 2805번(이진 탐색) (0) | 2022.07.20 |