문제
상근이, 창영이, 현진이는 역사와 전통을 자랑하는 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이다. 아이디 여러 개를 출력하는 경우에는 상근이, 창영이, 현진이 순서로 출력하고, 한 줄에 하나씩 출력한다.
풀이
Adrian Bruno Goran이 일정한 규칙을 가진 배열을 입력받은 후 배열의 길이가 다른게 불편해 그냥 최소 공배수인 12로 길이를 맞추주고 시작하니 편했다. 이후에는 12개의 일정한 배열이므로 문자열의 길이가 12가 넘을경우 카운트를 초기화해서 배열의 처음부터 다시 비교할 수 있도록 루프문을 설정해 주었다. 이후 과정은 얼마나 맞았는지에 대해 최댓값을 찾고 최댓값이 여러명일 수도 있다했으므로 최댓값과 같은 카운트인 사람에 대해서 출력해주었다. ㅇㅅㅇ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char[] Adrian = {'A','B','C','A','B','C','A','B','C','A','B','C'};
char[] Bruno = {'B','A','B','C','B','A','B','C','B','A','B','C'};
char[] Goran = {'C','C','A','A','B','B','C','C','A','A','B','B'};
int length = sc.nextInt();
int max=0;
int cnt1=0; int cnt2=0; int cnt3=0;
int number=0;
for(int i=0;i<length;i++) {
if(number%12==0) {number=0;}
if(temp.charAt(i)==Adrian[number]) {cnt1++;}
if(temp.charAt(i)==Bruno[number]) {cnt2++;}
if(temp.charAt(i)==Goran[number]) {cnt3++;}
number++;
}
int [] arr = {cnt1,cnt2,cnt3};
for(int i=0;i<3;i++) {
if(max<arr[i]) {
max=arr[i];
}
}
System.out.println(max);
for(int i=0;i<3;i++) {
if(arr[i]==max) {
switch(i) {
case 0:
System.out.println("Adrian");
break;
case 1:
System.out.println("Bruno");
break;
case 2:
System.out.println("Goran");
break;
}
}
}
}
}
|
https://www.acmicpc.net/problem/2966
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
www.acmicpc.net
'Algorithms > BOJ[Java]' 카테고리의 다른 글
[백준/11718번] 그대로 출력하기 [Java] (0) | 2019.12.03 |
---|---|
[백준/1110번] 더하기 사이클 [Java] (0) | 2019.12.03 |
[백준/4153번] 직각삼각형 [Java] (0) | 2019.12.02 |
[백준/1978번] 소수 찾기 [Java] (0) | 2019.12.02 |
[백준/3460번] 이진수 [Java] (0) | 2019.12.02 |