문제 내용은 입력으로 종민이와 그녀의 영어 이름을 받은 뒤, 이름 궁합을 처리에서 최종 2글자가 남았을 때 해당 값을 이어붙인 후 출력해주면 되는데
먼저 영어 문자열을 받았을 때에는 A-Z에 따라 아래 힌트에 위치한 숫자로 대신해주고, 궁합을 처리할 경우에는 두 수를 더해주되, 2글자 이상이라면 오른쪽 값만 사용한다, 이런 식으로 1글자씩 줄여 나가다가 2글자 남으면 출력해주면 되는데
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
public class Main{
public static void main(String[] args) throws IOException {
Map<Character, Integer> alphabetValues = new HashMap<>();
char[] alphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
int[] values = {3, 2, 1, 2, 3, 3, 2, 3, 3, 2, 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1};
for (int i = 0; i < alphabets.length; i++) {
alphabetValues.put(alphabets[i], values[i]);
}
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String jong = br.readLine();
String her = br.readLine();
LinkedList<String> vals = new LinkedList<>();
for (int i = 0; i < jong.length(); i++) {
vals.add(String.valueOf(alphabetValues.get(jong.charAt(i))));
vals.add(String.valueOf(alphabetValues.get(her.charAt(i))));
}
while (vals.size() >= 3) {
String result = String.join("", vals);
vals.clear();
for (int i = 0; i < result.length() - 1; i++) {
String calc = String.valueOf((result.charAt(i) - '0') + (result.charAt(i + 1) - '0'));
if (calc.length() > 1) {
vals.add(String.valueOf(calc.charAt(1)));
} else {
vals.add(calc);
}
}
}
System.out.println(vals.get(0) + vals.get(1));
}
}
문제를 풀어보자면 먼저 Map에 A-Z 까지 힌트에 획수를 넣어준 후, 종민이와 그녀의 이름 문자열을 받아 문제를 풀어줘야 하는데, 문자열을 받으면 먼저 Map에 넣어둔 값으로 모두 변환한 뒤, 이후부터는 While 문을 돌리면서 각 값들을 서로 더해 2글자 남을 때 까지 돌려주면 된다
여기서 유의할 점은 두 수를 더했을 때 2자리 수가 넘어간다면 오른쪽 값을 사용해야 한다. 이후 궁합을 계속 돌려주면서 2글자 이하로 줄여졌다면 해당 두 수를 문자열 형태로 더해서 출력해주면 끝이다.
Leave a Reply