[알고리즘]/알고리즘

백준 1718번 : 암호 (브론즈2)

쿠릉쿠릉 쾅쾅 2022. 4. 12. 12:50
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