https://www.acmicpc.net/problem/2966
์ฝ๋
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt();
/** 0 **/
char[] A = {'A', 'B', 'C'};
char[] B = {'B', 'A', 'B', 'C'};
char[] G = {'C', 'C', 'A', 'A', 'B', 'B'};
boolean flag = true;
String[] name = {"Adrian", "Bruno", "Goran"};
int[] rightCount = new int[3];
String answer = scan.next();
/** 1 **/
for(int i=0; i<answer.length(); i++) {
for(int j=0; j<A.length; j++) {
if(i+j >= answer.length()) {
flag = false;
break;
}
if(answer.charAt(i+j) == A[j])
rightCount[0] ++;
}
if(!flag)
break;
i += A.length-1;
}
/** 2 **/
flag = true;
for(int i=0; i<answer.length(); i++) {
for(int j=0; j<B.length; j++) {
if(i+j >= answer.length()) {
flag = false;
break;
}
if(answer.charAt(i+j) == B[j])
rightCount[1] ++;
}
if(!flag)
break;
i += B.length-1;
}
/** 3 **/
flag = true;
for(int i=0; i<answer.length(); i++) {
for(int j=0; j<G.length; j++) {
if(i+j >= answer.length()) {
flag = false;
break;
}
if(answer.charAt(i+j) == G[j])
rightCount[2] ++;
}
if(!flag)
break;
i += G.length-1;
}
/** 4 **/
int max = 0;
for(int i=0; i<rightCount.length; i++)
if(rightCount[i] > max)
max = rightCount[i];
System.out.println(max);
/** 5 **/
for(int i=0; i<name.length; i++) {
if(max == rightCount[i])
System.out.println(name[i]);
}
scan.close();
}
}
๋ฌธ์ ์ดํด
๊ตฌํ์ด ๊ฝค ๊น๋ค๋ก์ ๋ค... ์๊ฐํ ๊ฒ์ด ์ข ์๊ธฐ๋ํด๊ณ , ๋ณต์กํ๊ฒ ํ์ด์ ์ฝ๋๋ ๊ธธ์ด์ก๋ค.
๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์๊ฐํ ํ์ด๋ ,
์๊ทผ, ์ฐฝ์, ํ์ง์ด๊ฐ ๊ฐ๊ฐ ๋ช๋ฌธ์ ๋ฅผ ๋งํ๋์ง ์ ๋ถ count๋ฅผ ํ๊ณ ,
๊ฐ์ฅ ๋ง์ด ๋งํ ํ์์ ์ถ๋ ฅํ๋, ์์ ํ์์ผ๋ก ํ๋ ค๊ณ ์๊ฐํ๋ค.
ํ์ด
์๊ทผ์ด๋ A, B, C ์์ผ๋ก ์ฐ๊ณ
์ฐฝ์์ด๋ B, A, B, C ์์ผ๋ก ์ฐ๊ณ
ํ์ง์ด๋ C, C, A, A, B, B ์์ผ๋ก ์ฐ๋๋ค.
๋ฐ๋ผ์ ์ ์ธ๋ช ์ด ์ฐ๋ ๋ฐฉ์์ ๋ฐฐ์ด๋ก ์ ์ฅํ๋ค.
/** 0 **/
char[] A, B, G
- ๊ฐ ํ์์ด ์ฐ๋ ๊ท์น์ ์ ์ฅํ๊ณ ,
boolean flag
for๋ฌธ์์ ๋ฒ์๊ฐ ๋ฒ์ด๋ ๊ฒฝ์ฐ break๋ฅผ ๊ฑธ์ด์ฃผ๊ธฐ ์ํด ์ ์ธํ๋ค.
- ์์ ์ ๋ ฅ 1์ ์๋ก๋ค๋ฉด, ์ ๋ต์ BAACC๋ก ๊ธธ์ด๊ฐ 5์ง๋ง, ํ์ง์ด๊ฐ ์ฐ๋ ๊ท์น์ ๊ธธ์ด๋ 6์ด๋ค. ๋ฐ๋ผ์ ํ์ง์ด๊ฐ ์ฐ๋ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ์ ๋ต์ ๊ธธ์ด๋ณด๋ค ์ปค์ง๋, break๋ก ํ์ถ์ ํด์ค์ผ ํ๋ค.
String[] name
- ๋ง์ง๋ง ์ถ๋ ฅ์ ์ฌ์ฉํ ์ธ ํ์์ ์ด๋ฆ์ ์ ์ฅํ๋ค.
int[] rightCount
- ์ธ ํ์์ ์ ๋ต ์๋ฅผ ์ ์ฅํ๋ค.
String answer
- ์ ๋ต์ ์ ๋ ฅ๋ฐ๋๋ค.
/** 1 **/
์๊ทผ์ด๊ฐ ์ฐ์ ๋ฌธ์ ์ ์ ๋ต์ ๊ตฌํ๋ for๋ฌธ์ด๋ค.
i๋ ์ ๋ต์ ๊ธธ์ด, j๋ ์๊ทผ์ด๊ฐ ์ฐ์ ๋ฌธ์์ ๊ธธ์ด๋ค.
์ flag๋ฅผ ์ ์ธํ ๋ ๋งํ๋ ๊ฒ ์ฒ๋ผ, ๋ฒ์๊ฐ ๋ฒ์ด๋ ๊ฒฝ์ฐ ํ์ถ์ ์ํจ๋ค.
์ ๋ต์ด BAACC ์ผ ๋, ์๊ทผ์ด๋ A, B, C, A, B, C, ... ์์ผ๋ก ์ฐ๋๋ค.
B A A
A B C
์ ์ธ๊ฐ๋ฅผ ํ์ธํ๊ณ , ๋์ด๊ฐ์ผํ๋ ๋ค์ ์ ๋ต์ ์๊ทผ์ด๊ฐ ์ฐ๋ ๊ท์น์ ๊ธธ์ด๋งํผ ๋ฐ์ด๋์ด์ผ ํ๋ค.
B A A ๋ค์ ํ์ธํด์ผํ ๋ถ๋ถ์ C C <- ์ด๋ถ๋ถ์ด๋ค.
๋ฐ๋ผ์ i์ ๊ฐ์ A.length - 1 ๋งํผ ๋ํด์ฃผ๋๋ฐ, -1์ ํ๋ ์ด์ ๋ for๋ฌธ์ ++์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
B A A C C
A B C
๋ค์์ผ๋ก๋
B A A C C
A B C ...
์์๊ฐ์ด ํ์ธํด์ผ ํ๋ค.
๋ฐ๋ผ์ A๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ j๋ก ๋์ผํ์ง๋ง,
๋ฌธ์์ด answer์ ์ธ๋ฑ์ค๋ ์์ ์ฒ๋ผ ์ด๋ํ๋ฏ๋ก i๊ฐ๋งํผ ๋ํด์ค์ผ ํ๋ค.
if(answer.charAt(i+j) == A[j])
rightCount[0] ++;
/** 2 **/ , /** 3 **/
์ 2๋ฒ, 3๋ฒ์ /**1 **/๊ณผ ๋์ผํ๊ฒ ๊ฐ๊ฐ ์ฐฝ์, ํ์ง์ด์ ์ ๋ต์ ์นด์ดํธ ํด์ฃผ๋ for๋ฌธ์ด๋คใ ฃ.
/** 4 **/
์ธ ํ์์ค ์ ๋ต์ ๊ฐ์ฅ ๋ง์ด ๋ง์ถ(์์ฐ์) ํ์์ ์ฐพ๊ณ , max์ ์ ์ฅํ๋ค.
/** 5 **/
๊ฐ ํ์๋ณ ๋ง์ ์ ๋ต์ ์ ์ฅํ rightCount ๋ฐฐ์ด์ ์์๊ฐ์ด max์ ๋์ผํ ๋,
๋์ผํ i๊ฐ์ ์ธ๋ฑ์ค๋ก ๊ฐ๋ name ๋ฐฐ์ด์ ์ถ๋ ฅํ๋ค.
๋ค๋ฅธ ํ์ด
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
String answer = sc.nextLine();
int[] score = new int[3];
int[] pattern = { 66, 65, 66, 67 };
for (int i = 0; i < n; i++) {
if (answer.charAt(i) == i % 3 + 65) {
score[0]++;
}
if (answer.charAt(i) == pattern[i % 4]) {
score[1]++;
}
if (answer.charAt(i) == (i + 4) % 6 / 2 + 65) {
score[2]++;
}
}
int max = 0;
for (int i = 0; i < 3; i++) {
if (score[i] > max) {
max = score[i];
}
}
System.out.println(max);
if (score[0] == max) {
System.out.println("Adrian");
}
if (score[1] == max) {
System.out.println("Bruno");
}
if (score[2] == max) {
System.out.println("Goran");
}
sc.close();
}
}
pattern ๋ฐฐ์ด์ 66, 65, 66, 67 ๊ฐ์ ๊ฐ๊ฐ ์์คํค์ฝ๋๊ฐ์ผ๋ก B, A, B, C ๊ฐ์ด๋ค.
์์ ๊ฐ ํ์๋ณ score ๋ฐฐ์ด์ ์ ์ฅํ๋ ๋ ผ๋ฆฌ๊ฐ ๋๋ฌด๋๋ฌด ๊น๋ํ๋ค ... !!
import java.util.*;
class Main {
public static void main(String[] Q) {
Scanner k = new Scanner(System.in);
int s = Integer.parseInt(k.nextLine());
String rslt = k.nextLine().substring(0, s);
String a = "ABC";
String b = "BABC";
String g = "CCAABB";
int best[] = new int[3];
for (int i = 0; i < rslt.length(); i++) {
if (rslt.charAt(i) == a.charAt(i % 3))best[0]++;
if (rslt.charAt(i) == b.charAt(i % 4))best[1]++;
if (rslt.charAt(i) == g.charAt(i % 6))best[2]++;
}
int Ma=best[0];
int index=0;
for(int i=0;i<best.length;i++) {
if(best[i]>=Ma)
{
Ma=best[i];
index=i;
}
}
System.out.println(Ma);
if(best[0]==Ma)System.out.println("Adrian");
if(best[1]==Ma)System.out.println("Bruno");
if(best[2]==Ma)System.out.println("Goran");
}
}
๊ฐ ํ์์ ์ ๋ต์ ์ ์ฅํ ๋, 3, 4, 6 ์ผ๋ก ๋๋ ์ธ๋ฑ์ค์ ๋์ผํ์ง๋ฅผ ํ๋จํด์ ์ ์ฅ..... ์
if๋ฌธ์ ํ์ค๋ก ์์ ํ๊ธด ํ์ง๋ง ์ญ์ ๊น๋ํ ์ฝ๋ ...
๋ง์ง๋ง ์ถ๋ ฅ์ ๋ค ๋์ผํ์ง๋ง, ๊ฐ ํ์์ด ์ฐ๋ ๊ธธ์ด๋ 3, 4, 6 ์ด๋ฏ๋ก
์ด ๊ฐ์ ์ ์ด์ฉํ๋ฉด ํจ์ฌ ์ฝ๊ณ ๊ฐ๊ฒฐํ๊ฒ ํ ์ ์์๋ค .!!
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1449๋ฒ: ์๋ฆฌ๊ณต ํญ์น(๊ทธ๋ฆฌ๋, ์ ๋ ฌ) (0) | 2020.02.27 |
---|---|
[๋ฐฑ์ค] 2193๋ฒ: ์ด์น์(DP) (0) | 2020.02.27 |
[๋ฐฑ์ค] 1065๋ฒ: ํ์(์์ ํ์, brute force) (0) | 2020.02.26 |
[๋ฐฑ์ค] 1149๋ฒ: RGB๊ฑฐ๋ฆฌ(DP) (0) | 2020.02.26 |
[๋ฐฑ์ค] 11726๋ฒ: 2xn ํ์ผ๋ง(DP) (0) | 2020.02.25 |
๋๊ธ