암호 (문자열 활용)
문제
나의풀이
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'으로 바꾼다.
핵심키워드
- substring(0,7)로 끊고, 다음 s를 s.substring(7)로 하면 이미 끊긴 string을 제외한 부분을 지정해서 돌릴수있다.
- Integer.parseInt(n,진수); 를 이용하면 2진수,8진수 16진수 등 여러 진수 형태의 값을 10진수 값으로 나타낼수있다.
- 효율적인 코드를 쓰자!
Author And Source
이 문제에 관하여(암호 (문자열 활용)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@zmdals/암호-문자열-활용저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)