📌 문제 설명
현수는 영희에게 알파벳 대문자로 구성된 비밀편지를 매일 컴퓨터를 이용해 보냅니다. 이 편지는 암호화된 이진수 형태로 #은 1로, *은 0으로 변환합니다.
- 각 알파벳 문자는 # 또는 *로 이루어진 7자리 이진수로 표현됩니다.
- 이진수를 10진수로 변환한 후, ASCII 코드로 변환하면 해당 문자가 됩니다.
암호 해독 과정
- 7자리 신호를 이진수로 변환 (# → 1, * → 0)
- 변환된 이진수를 10진수로 변환
- 변환된 10진수를 ASCII 코드로 변환하여 문자 해독
📝 입력 & 출력
🔹 입력
- 첫 번째 줄: 보낸 문자 개수 N (1 ≤ N ≤ 10)
- 두 번째 줄: N * 7 길이의 # 또는 *로 이루어진 문자열
🔹 출력
- 첫 번째 줄: 해석된 문자열 출력
🔸 예제 입력 1
4
#****###**#####**#####**##**
🔸 예제 출력 1
COOL
💡 해결 방법
- 문자열을 7자리 단위로 잘라서 변환
- replace('#', '1').replace('*', '0')을 사용해 이진수 변환
- Integer.parseInt(tmp, 2)을 사용해 이진수를 10진수로 변환
- 아스키 코드 문자로 변환 ((char) 숫자)
- 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
'코딩테스트 > 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비' 카테고리의 다른 글
| 섹션 2. Array - 2. 보이는 학생 (0) | 2025.03.21 |
|---|---|
| 섹션 2. Array - 1. 큰 수 출력하기 (0) | 2025.03.21 |
| 섹션 1. 문자열 - 11. 문자열 압축 (0) | 2025.03.18 |
| 섹션1. 문자열 - 10. 가장 짧은 문자 거리 (0) | 2025.03.18 |
| 섹션 1. 문자열 - 9. 숫자만 추출 (0) | 2025.03.18 |