백준 Baekjoon 2966번 찍기 - JAVA

Jaeho Kim·2022년 4월 19일
0

코딩테스트

목록 보기
38/110

https://www.acmicpc.net/problem/2966

문제
상근이, 창영이, 현진이는 역사와 전통을 자랑하는 Sogang ACM-ICPC Team에 가입하려고 한다. 하지만, 가입하려고 하는 모든 지원자는 C언어 필기시험을 통과해야 한다. 이들은 C언어를 할 줄 모른다. 따라서, 필기시험을 모두 찍으려고 한다.
상근이는 A, B, C, A, B, C, A, B, C, A, B, C, ...와 같이 찍어야 통과할 수 있다고 생각한다.
하지만, 창영이는 B, A, B, C, B, A, B, C, B, A, B, C, ...와 같이 찍는 방법이 만점의 지름길이라고 생각한다.
마지막으로, 현진이는 상근이와 창영이를 비웃으면서 C, C, A, A, B, B, C, C, A, A, B, B, ...와 같이 찍어야 통과한다고 말했다.
필기시험의 정답이 주어졌을 때, 상근이, 창영이, 현진이 중에서 가장 많은 문제를 맞힌 사람이 누구인지 구하는 프로그램을 작성하시오.

입력
첫째 줄에 필기시험의 문제의 수 N이 주어진다. (1 ≤ N ≤ 100)
둘째 줄에는 시험의 정답이 주어진다.

출력
첫째 줄에 가장 많은 문제를 맞춘 사람이 몇 문제를 맞혔는지 출력한다.
다음 줄에는 가장 많은 문제를 맞힌 사람의 아이디를 출력한다. 상근이의 아이디는 Adrian, 창영이의 아이디는 Bruno, 현진이의 아이디는 Goran이다. 아이디 여러 개를 출력하는 경우에는 상근이, 창영이, 현진이 순서로 출력하고, 한 줄에 하나씩 출력한다.

예제 입력 1

5
BAACC

예제 출력 1

3
Bruno

예제 입력 2

9
AAAABBBBB

예제 출력 2

4
Adrian
Bruno
Goran
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		Map<String, Map<String, Integer>> map = new HashMap<>();
		String name[] = { "Adrian", "Bruno", "Goran" };
		String pattern[] = { "ABC", "BABC", "CCAABB" };

		for (int i = 0; i < name.length; i++) {
			map.put(name[i], new HashMap<>());
			map.get(name[i]).put(pattern[i], 0);
		}

		int num = Integer.parseInt(br.readLine());
		String exam = br.readLine();
		for (int i = 0; i < num; i++) {
			for (int j = 0; j < name.length; j++) {
				if (exam.charAt(i % exam.length()) == pattern[j].charAt(i % pattern[j].length()))
					map.get(name[j]).put(pattern[j], (map.get(name[j]).get(pattern[j]) + 1));
			}
		}

		int sum = 0;
		String str = "";
		for (String key : map.keySet()) {
			int val2 = map.get(key).get((String) map.get(key).keySet().toArray()[0]);

			if (sum < val2) {
				sum = val2;
				str = key + "-";
			} else if (sum == val2)
				str += key + "-";
		}
		String[] strArr = str.split("-");
		Arrays.sort(strArr);

		System.out.println(sum);
		for (int i = 0; i < strArr.length; i++) {
			System.out.println(strArr[i]);
		}
	}
}
  • 설명
  • 간만에 시간이 걸린 문제.... 빨리 새로 간단하게 짜야했을까.. 경험이 재산이라고 생각했기때문에
  • 고집을 부려 완수해 내었다......... 원복은 빠르게 설계는 정교하게..하자
  • Map안에 Map을 넣은 구조로 설계하였는데 좋은거같지는 않다... 잘못 꺼냈나..?
profile
Hello, World!

0개의 댓글