728x90
문제
https://www.acmicpc.net/problem/1718
📌 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 평문 입력 받기
String line = br.readLine();
// 평문 입력값 글자 수
int lineLen = line.length();
// 암호화 키 입력 받기
String key = br.readLine();
// 암호화 키 글자 수
int keyLen = key.length();
// 진짜 암호화키로 쓸 문자 정의
StringBuilder sb = new StringBuilder(key);
// 암호화키가 평문보다 짧을 경우 암호화 키를 반복한다.
for(int i=0; i<lineLen/keyLen-1; i++) {
sb.append(key);
}
key = sb.toString();
char[] arrKey = key.toCharArray();
char[] arrLine = line.toCharArray();
// 정답으로 출력할 변수
StringBuilder temp = new StringBuilder();
// 평문의 문자열 길이만큼 반복
for(int i=0; i<arrLine.length; i++) {
if(arrLine[i] == ' ') {
temp.append(" ");
continue;
}
// 암호화 키의 i번째 문자가 알파벳의 몇 번째 순서인지 구하기
int num = arrKey[i] - 'a' + 1 ;
// 두 문자가 서로 같거나
// 평문의 i번째 문자가 암호화 키의 i번째의 문자보다 앞 순서에 있을 때 (ex. 평문 i 번째는 a, 암호화키의 i번째는 b)
if(arrLine[i] <= arrKey[i]) {
// 암호화키의 i번 문자에서 평문 i번째 문자를 뺀다. 그리고 그 결과값을 'z'에서 뺀다.
char result = (char)('z' - (arrKey[i] - arrLine[i]));
temp.append(result);
continue;
}
temp.append((char)(arrLine[i] - num));
}
System.out.println(temp);
}
}
728x90
'[알고리즘] > 알고리즘' 카테고리의 다른 글
[알고리즘] 백준 8896번 : 가위 바위 보 (실버3) (0) | 2022.04.13 |
---|---|
백준 10820번 : 문자열 분석 (브론즈2) (0) | 2022.04.12 |
[알고리즘] 백준 1003번 : 피보나치 함수 (0) | 2022.04.12 |
[알고리즘] 백준 10809번 알파벳 찾기 (브론즈2) (0) | 2022.04.07 |
[알고리즘] 백준 2870번 : 수학숙제 (실버4) (0) | 2022.03.14 |