백준 알고리즘 17269번
https://www.acmicpc.net/problem/17269
17269번: 이름궁합 테스트
시윤이는 좋아하는 이성이 생기면 가장 먼저 이름궁합부터 본다. 이름궁합을 보는 방법은 간단하다. 먼저 이름을 알파벳 대문자로 적는다. 각 알파벳 대문자에는 다음과 같이 알파벳을 적는데
www.acmicpc.net
17269번
입력으로 이름의 길이 al, bl이 들어오고 그 다음 줄에 이름 a, b가 들어온다.
먼저 주어진 이름부터 한 글자씩 적어서 두사람의 궁합이 좋을 확률을 구하여라.
궁합을 구하는 과정은 다음과 같다.
이름 a, b를 먼저 주어진 이름부터 한 글자씩 번갈아가며 적는다.
만약 이름이 남을 경우에는 뒤에 남은 글자를 맨 뒤에 붙여준다.
이렇게 구한 문자열의 각 문자를 해당 알파벳을 적는데 필요한 획수로 이루어진 문자열을 구한다.
해당 문자열을 가지고 각 숫자와 오른쪽 숫자를 더한 것으로 이루어진 문자열을 또 구한다.
(이때 10이상인 경우 10을 빼준다.)
이 문자열의 길이가 2가 될 때까지 반복한다.
문제 해결
문자열 처리를 하는 문제이다.
일단 이름 2개를 번갈아가며 적는 함수 concatStr()을 구현한다.
이름 2개 중 길이가 짧은 것을 기준으로 번갈아가며 적고 길이가 긴 것의 나머지 부분을 뒤에 붙여준다.
concatStr()로 문자열을 구했으면 문자열의 각 문자들을 알파벳을 적는데 필요한 획수로 이루어진 문자열로 바꾸고 해당 문자열을 이용하여 궁합을 구하는 과정이 필요하다. 이 과정을 진행하는 함수가 ans()이다.
ans()를 보면 처음에 for문을 돌려서 각 문자를 알파벳을 적는데 필요한 획수로 바꿔준다.
또한 while 문을 ans의 길이가 2일 때까지 돌려서 정답을 구한다.
코드
package bj17269;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String[] name = str.split(" ");
int n = Integer.parseInt(name[0]);
int m = Integer.parseInt(name[1]);
str = br.readLine();
name = str.split(" ");
String answer = concatStr(name[0], name[1], n, m);
int result = ans(answer);
System.out.println(result + "%");
}
public static String concatStr(String a, String b, int al, int bl) {
String answer = "";
if (al < bl) {
for (int i = 0; i < al; i++) {
answer += a.charAt(i);
answer += b.charAt(i);
}
answer += b.substring(al, bl);
} else {
for (int i = 0; i < bl; i++) {
answer += a.charAt(i);
answer += b.charAt(i);
}
answer += a.substring(bl, al);
}
return answer;
}
public static int ans(String a) {
int[] alpha = { 3, 2, 1, 2, 4, 3, 1, 3, 1, 1, 3, 1, 3, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1 };
String number = "";
int len = a.length();
for (int i = 0; i < len; i++) {
number += Integer.toString(alpha[a.charAt(i) - 'A']);
}
String ans = "";
while (true) {
len = number.length();
for (int i = 0; i < len - 1; i++) {
int n = number.charAt(i) - '0';
int m = number.charAt(i + 1) - '0';
int num = n + m;
if (num >= 10) {
num -= 10;
}
ans += Integer.toString(num);
}
if (ans.length() == 2) {
return Integer.parseInt(ans);
}
number = ans;
ans = "";
}
}
}
결과
'Algorithm' 카테고리의 다른 글
백준 16165번 <걸그룹 마스터 준석이> (0) | 2022.01.19 |
---|---|
백준 17389번 <보너스 점수> (0) | 2022.01.18 |
백준 16398번 <행성연결> (0) | 2021.12.22 |
백준 1339번 <단어 수학> (0) | 2021.12.20 |
백준 1655번 <가운데를 말해요> (0) | 2021.12.18 |
댓글