본문 바로가기
Algorithm

백준 17269번 <이름궁합 테스트>

by seungh2 2022. 1. 18.

백준 알고리즘 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 = "";
		}
	}

}

결과


 

728x90

'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

댓글