본문 바로가기

코딩테스트/자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

섹션 1. 문자열 - 12. 암호

📌 문제 설명

현수는 영희에게 알파벳 대문자로 구성된 비밀편지를 매일 컴퓨터를 이용해 보냅니다. 이 편지는 암호화된 이진수 형태로 #은 1로, *은 0으로 변환합니다.

  • 각 알파벳 문자는 # 또는 *로 이루어진 7자리 이진수로 표현됩니다.
  • 이진수를 10진수로 변환한 후, ASCII 코드로 변환하면 해당 문자가 됩니다.

암호 해독 과정

  1. 7자리 신호를 이진수로 변환 (# → 1, * → 0)
  2. 변환된 이진수를 10진수로 변환
  3. 변환된 10진수를 ASCII 코드로 변환하여 문자 해독

📝 입력 & 출력

🔹 입력

  • 첫 번째 줄: 보낸 문자 개수 N (1 ≤ N ≤ 10)
  • 두 번째 줄: N * 7 길이의 # 또는 *로 이루어진 문자열

🔹 출력

  • 첫 번째 줄: 해석된 문자열 출력

🔸 예제 입력 1

4
#****###**#####**#####**##**

🔸 예제 출력 1

COOL

💡 해결 방법

  1. 문자열을 7자리 단위로 잘라서 변환
  2. replace('#', '1').replace('*', '0')을 사용해 이진수 변환
  3. Integer.parseInt(tmp, 2)을 사용해 이진수를 10진수로 변환
  4. 아스키 코드 문자로 변환 ((char) 숫자)
  5. StringBuilder를 사용하여 최종 문자열 생성

💻 코드 구현 (Java)

package partString;

import java.util.*;

public class Problem12 {
    public String solution(int num, String str) {
        StringBuilder result = new StringBuilder();
        
        for (int i = 0; i < num; i++) {
            // 7자리씩 자르고 # → 1, * → 0 변환
            String tmp = str.substring(i * 7, (i + 1) * 7).replace('#', '1').replace('*', '0');
            
            // 2진수를 10진수로 변환 후, ASCII 문자로 변환
            result.append((char) Integer.parseInt(tmp, 2));
        }
        return result.toString();
    }
    
    public static void main(String[] args) {
        Problem12 T = new Problem12();
        Scanner kb = new Scanner(System.in);
        int num = kb.nextInt();
        String str = kb.next();
        System.out.println(T.solution(num, str));
        kb.close();
    }
}

📖 코드 설명

1️⃣ # → 1, * → 0 변환 및 7자리씩 자르기

String tmp = str.substring(i * 7, (i + 1) * 7).replace('#', '1').replace('*', '0');
  • substring(i * 7, (i + 1) * 7) → 7자리씩 잘라서 처리
  • .replace('#', '1').replace('*', '0') → 이진수로 변환

2️⃣ 이진수를 10진수로 변환 후 ASCII 문자 변환

result.append((char) Integer.parseInt(tmp, 2));
  • Integer.parseInt(tmp, 2) → 2진수를 10진수로 변환
  • (char)을 사용해 ASCII 문자로 변환

⏳ 시간 복잡도 분석

  • O(N) (N: 문자 개수)
  • 문자열을 7개씩 잘라서 변환하는 과정이므로 선형 시간 복잡도

출처: 인프런 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

 

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 강의 | 김태원 - 인프런

김태원 | , 자바(Java) 알고리즘 문제풀이 채점사이트를 통해 기초부터 준비해보세요! 💪 [사진] 이 강의는 [사진] 자바(Java)로 코딩테스트 준비를 하고 계신 분께 추천드려요! 문제는 기초~ 중급

www.inflearn.com