문제
암호는 # 과 *로 이루어져 있으며, #은 이진수의 1로, *은 이진수의 0으로 변환하여 해석해주세요
알파벳 한 문자마다 #또는 *이 일곱개로 구성되어 있습니다.
입력
4
#****###**#####**#####**##**
출력
COOL
풀이
나의 답 -틀림
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Main main = new Main();
Scanner in = new Scanner(System.in);
int cnt = in.nextInt();
String str = in.next();
System.out.print(main.solution(cnt, str));
return;
}
public String solution(int cnt, String str) {
String answer = "";
for(int i=0;i<cnt;i++){
String alpha = "";
String word = str.substring(i*7,i*7+7);
for(char c : word.toCharArray()) {
if(c==35) alpha += "1";
else alpha += "0";
int a = Integer.parseInt(alpha, 2);
char b = (char)a;
answer += String.valueOf(b);
}
}
return answer;
}
}
풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Main main = new Main();
Scanner in = new Scanner(System.in);
int cnt = in.nextInt();
String str = in.next();
System.out.print(main.solution(cnt, str));
return;
}
public String solution(int cnt, String str) {
String answer = "";
for(int i=0;i<cnt;i++){
String word = str.substring(0, 7)
.replace('#', '1')
.replace('*', '0');
int num = Integer.parseInt(word, 2);
answer += (char)num;
str = str.substring(7);
}
return answer;
}
}
나는 replace를 사용하지 않았기 때문에 코드가 어지럽게 나온 경향이 있고, 풀이는 replace와 substring함수를 적절하게 사용함으로서 코드의 가독성이 굉장히 좋아졌다.
String.substring(int i)
: 인덱스 0부터 i-1 까지 문자열을 잘라없애서 리턴시켜준다.
String.substring(int i, int n)
: String의 인덱스 i 부터 n-1까지 자른 값을 리턴시켜 준다.
참고
이 글은 인프런 강의 김태원님의
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비를 바탕으로 쓴 글입니다.
반응형