https://www.acmicpc.net/problem/10250
문제 방향성
풀이 방법
1. 층수는 나머지로 앞에 붙이고,
2. 호수는 무조건 앞에 0 이 붙게해서 402이런식으로 만들어 준다.
==============================================================================================
https://www.acmicpc.net/problem/4949
문제 방향성
public static String solve(String s) {
Stack<Character> stack = new Stack<>();
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i); // i 번째 문자
// 여는 괄호일 경우 스택에 push
if(c == '(' || c == '[') {
stack.push(c);
}
// 닫는 소괄호 일 경우
else if(c == ')') {
if(stack.empty() || stack.peek() != '(') {
return "no";
}
else {
stack.pop();
}
}
else if(c == ']') {
if(stack.empty() || stack.peek() != '[') {
return "no";
}
else {
stack.pop();
}
}
// 그 외의 경우에는 불필요한 문자들이기에 skip한다.
}
if(stack.empty()) {
return "yes";
}
else {
return "no";
}
}
}
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String s;
while(true) {
s = br.readLine();
if(s.equals(".")) { // 종료 조건문
break;
}
sb.append(solve(s)).append('\n');
}
System.out.println(sb);
}
문제 풀이
StringTokenize, 스택, 데큐
==============================================================================================
https://www.acmicpc.net/problem/2910
문제 방향성
1. 두 수에서 많이 등장하는 빈도
2. 먼저 배열에 들어와 있었는지로 판단.
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st1 = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(st1.nextToken());
StringTokenizer st2 = new StringTokenizer(br.readLine());
HashMap<Integer, int[]> map = new HashMap<>(n); // 0은 개수, 1은 인덱스
int idx = 0;
while (st2.hasMoreTokens()){
int in = Integer.parseInt(st2.nextToken());
if (map.containsKey(in))
map.put(in, new int[]{map.get(in)[0]+1, map.get(in)[1]});
else map.put(in, new int[]{1, idx++});
}
map.entrySet().stream().sorted(new Comparator<Map.Entry<Integer, int[]>>() {
@Override
public int compare(Map.Entry<Integer, int[]> o1, Map.Entry<Integer, int[]> o2) {
if (o2.getValue()[0]==o1.getValue()[0])
return o1.getValue()[1]-o2.getValue()[1];
return o2.getValue()[0]-o1.getValue()[0];
}
}).forEach(i->{
for (int j=0; j<i.getValue()[0]; j++)
sb.append(i.getKey()+" ");
});
System.out.print(sb);
}
}
풀이방법
map으로 해당 값들을 key로 받으면서, 같은 값이 들어올때마다 +1
정렬해서 출력하는 방법에 대해 Comparator를 사용했는데
잘 모르겠다. 아직
comparator 생성자