(문제 설명이 길어서 짤린 부분은 아래 링크에 있습니다.)
https://www.acmicpc.net/problem/10250
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class boj10250 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; int T = Integer.parseInt(br.readLine()); for(int i = 0; i < T; i++) { st = new StringTokenizer(br.readLine()); int H = Integer.parseInt(st.nextToken()); int W = Integer.parseInt(st.nextToken()); int N = Integer.parseInt(st.nextToken()); if(N % H == 0) { System.out.println((H * 100) + (N / H)); } else { System.out.println(((N % H) * 100) + ((N / H) + 1)); } } } }
- 문제에서 주어지는 입력 값 H,W,N을 저장한다.
- N%H에서 N이 6의 배수인 경우에는 0이 됨으로 예외처리를 해주고, 나머지는 층 수로, 몫 +1 은 호수로 출력한다.
import java.io.*;
import java.util.*;
public class boj4949 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
boolean isTrue = true;
while(isTrue) {
Stack<Character> stack1 = new Stack();
char[] arr = br.readLine().toCharArray();
if (arr.length == 1 && arr[arr.length - 1] == '.') {
isTrue = false;
break;
} else {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == '(') {
stack1.add(arr[i]);
} else if (arr[i] == '[') {
stack1.add(arr[i]);
} else if (arr[i] == ')') {
if (stack1.isEmpty()) {
stack1.add(arr[i]);
break;
} else if(stack1.peek() == '(') {
stack1.pop();
}else{
break;
}
} else if (arr[i] == ']') {
if (stack1.isEmpty()) {
stack1.add(arr[i]);
break;
} else if(stack1.peek() == '[') {
stack1.pop();
}else{
break;
}
}
}
}
if(stack1.isEmpty()){
sb.append("yes" +"\n");
}else{
sb.append("no" + "\n");
}
}
System.out.println(sb);
}
}
- 문제에서는 소괄호와 대괄호를 기준으로 균형을 맞춘다.
- 열린 괄호가 있으면 무조껀 닫힌 가로가 균형을 이뤄야한다.
- (, [가 나올 때는 stack에 add를하고, )와]가 나올 때는 stack에 peek()값이 같은 괄호에 여는 괄호로 나오면 반복문을 이어가고, 그렇지 않으면 stack에 add하고 종료한다.
- 만약에 stack에 내용물이 없다면 문자열이 균형을 이룬다는 뜻으로 yes를 추가하고, 그렇지 않다면 no를 추가한다.
- StringBuilder를 통해 한 번에 출력한다.
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Comparator; public class boj2910 { public static void main(String args[]) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] str = br.readLine().split(" "); int N = Integer.parseInt(str[0]); str = br.readLine().split(" "); HashMap<Integer, Integer> list = new LinkedHashMap<Integer, Integer>(); for (int i = 0; i < N; i++) { if (list.containsKey(Integer.parseInt(str[i]))) { list.replace(Integer.parseInt(str[i]), list.get(Integer.parseInt(str[i])) + 1); } else { list.put(Integer.parseInt(str[i]), 1); } } ArrayList<Integer> v = new ArrayList<Integer>(list.keySet()); Collections.sort(v, new Comparator<Integer>() { @Override public int compare(Integer a, Integer b) { return Integer.compare(list.get(b), list.get(a)); } }); Iterator<Integer> it = v.iterator(); while (it.hasNext()) { Integer element = it.next(); for(int i=0; i<list.get(element); i++){ System.out.print(element+" "); } } } }
- 먼저 입력으로 N의 값을 받는다.
- Hashmap Integer, Integer 값으로 만든다.
- for문을 통해서 이미 입력된 key 값이 있다면 value 값에 +1을
아니라면 key 값을 추가한다.- 시간 복잡도를 줄이기 위해서 Collections.sort로 Comparator()로 정렬을 해주고, Iterator를 통해서 출력해 준다.