import java.util.*;
class Main {
public String solution(int n,String s) {
String answer = "";
String[] arr = new String[n];
for(int i=0; i<s.length();i++) {
if(i==0) {
arr[0] = s.substring(0, 7);
}
else if(i%7 == 0) {
arr[i/7] = s.substring(i, i+7);
}
}
for(int i = 0; i<arr.length;i++) {
arr[i] = arr[i].replaceAll("[#]", "1");
arr[i] = arr[i].replaceAll("[*]", "0");
}
for(String x : arr) {
char a = (char) Integer.parseInt(x, 2);
x = Character.toString(a);
answer += x;
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
String str = kb.next();
System.out.println(T.solution(n,str));
}
}
효율적인풀이
import java.util.*;
class Main {
public String solution(int n,String s) {
String answer = "";
for(int i=0; i<n;i++) {
String tmp = s.substring(0,7).replace('#', '1').replace('*','0');
int num = Integer.parseInt(tmp,2);
answer += (char) num;
s = s.substring(7);
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
String str = kb.next();
System.out.println(T.solution(n,str));
}
}
내 풀이방법이 틀린건 아니지만 코드 양이 많고, 조잡하다..
효율적인 풀이법과 내 풀이의 차이점을 보자면,
1. for문을 n회만큼 돌린다. 그리고 전체 스트링을 놓고 보는게 아닌, substring후에는 필요없는 부분은 제외하고 처리한다. (배웠는데 ㅠㅠ)
2. 여러for문을 만들지않고 최대한 한개의 for문 안에서 처리한다.
String tmp = s.substring(0,7) 자체에서 replace를 통해
'#' -> '1', '*' -> '0'으로 바꾼다.