반응형
출처
17269번: 이름궁합 테스트
시윤이는 좋아하는 이성이 생기면 가장 먼저 이름궁합부터 본다. 이름궁합을 보는 방법은 간단하다. 먼저 이름을 알파벳 대문자로 적는다. 각 알파벳 대문자에는 다음과 같이 알파벳을 적는데 �
www.acmicpc.net
풀이과정
1. 문제에서 주어진 방식대로 문자열 재조합
2. 알파벳에 해당하는 숫자 값 가져옴
3. 재귀함수 만들어서 2개만 남을때까지 더해주고 값 가져오기
작성 코드
import java.util.StringTokenizer;
import java.io.*;
public class Main {
public static int answer1 = 0;
public static int answer2 = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
String str1 = st.nextToken();
String str2 = st.nextToken();
int[] vals = { 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 newStr = "";
int maxLength = 0;
String result;
if (N > M)
maxLength = N;
else
maxLength = M;
// 새로 문자열 조합하면서 남은 문자열 뒤에 붙이기
for (int i = 0; i < maxLength; i++) {
if (N > i)
newStr = newStr + str1.charAt(i);
if (M > i)
newStr = newStr + str2.charAt(i);
}
int[] newStrAlb = new int[newStr.length()];
int[] newStrVals = new int[newStr.length()];
// 아래 for문 2개로 새로 조합한 문자열의 알파벳을 숫자값으로 변경
for (int i = 0; i < newStr.length(); i++)
newStrAlb[i] = newStr.charAt(i) - 'A';
for (int i = 0; i < newStrVals.length; i++)
newStrVals[i] = vals[newStrAlb[i]];
// 숫자값 2개 남을때까지 합산
dfs(newStrVals, true);
// 십의 자리 0인 경우 처리
if (answer1 == 0)
result = "" +answer2+"%" ;
else
result = answer1 + "" + answer2 + "%";
bw.write(result);
br.close();
bw.flush();
bw.close();
} // Main
public static void dfs(int[] vals, boolean flag) {
if (vals.length > 2 && flag == true) {
flag = true;
int[] tmp = new int[vals.length - 1];
for (int i = 0; i < vals.length - 1; i++) {
tmp[i] = vals[i] + vals[i + 1];
if (tmp[i] > 0 && tmp[i] >= 10)
tmp[i] = tmp[i] % 10;
}
dfs(tmp, flag);
} else {
answer1 = vals[0];
answer2 = vals[1];
flag = false;
return;
}
} // dfs
} // class
memo
백준도 시작하려고 작성한 첫 문제이다.
백준에서 계속 런타임 에러 발생하는데 도무지 모르겠음...
수정 후 정답 처리 받음
-> 문자열 받기 전에 숫자 두개 받는 게 있는데 그걸 처리 안했다. 문제를 끝까지 잘보자!!!!!
미숙해보여도 처음 통과한 재귀함수가 마음에 든다.
반응형
'머리맞대는이야기 > 백준' 카테고리의 다른 글
| [7490] 0 만들기 (0) | 2020.10.04 |
|---|---|
| [1074] Z (0) | 2020.10.04 |
| [2747] 피보나치 수 (0) | 2020.10.03 |
| [1939] 중량제한 (0) | 2020.09.30 |
| [1991] 트리순회 (0) | 2020.09.30 |