한 개의 문자열을 입력받고, 특정 문자를 입력받아 해당 특정문자가 입력받은 문자열에 몇 개 존재하는지 알아내는 프로그램을 작성하세요.
대소문자를 구분하지 않습니다.문자열의 길이는 100을 넘지 않습니다.
첫 줄에 문자열이 주어지고, 두 번째 줄에 문자가 주어진다.
문자열은 영어 알파벳으로만 구성되어 있습니다.
첫 줄에 해당 문자의 개수를 출력한다.
Computercooler
c
2
package section1;
import java.util.Scanner;
//문자 찾기
class Main {
public int solution(String str, char t){
int answer = 0;
//대소문자 구분이 없으므로 입력된 문자열과 문자 모두 대문자로 변경
str = str.toUpperCase();
//t는 문자이기 때문에 Character 클래스의 메소드로 대문자 변경
t = Character.toUpperCase(t);
//System.out.println(str+" "+t);
// for (int i = 0; i < str.length(); i++) {
// //str 문자열을 0부터 str 길이까지의 인덱스번호로 접근
// if (str.charAt(i) == t)
// answer++;
// }
//**toCharArray()**: "문자열"을 각각의 문자를 원소로 갖는 "**문자배열**"로 생성
//0번 인덱스부터 str.toCharArray() 문자배열의 마지막 인덱스까지
for(char x : str.toCharArray()){
if(x == t)
answer++;
}
return answer;
}
public static void main(String[] args) {
//Main 클래스의 solution 메서드가 인스턴스 메소드(none-static) 이기 때문에 객체 생성
Main T = new Main();
Scanner kb = new Scanner(System.in);
//next(): 콘솔창에서 문자열 하나를 읽음, String 형태
String str = kb.next();
//next().charAt(0): String을 인덱스로 접근하여 0번에 있는 것을 리턴
char c = kb.next().charAt(0);
System.out.println(T.solution(str, c));
}
}
대문자와 소문자가 같이 존재하는 문자열을 입력받아 대문자는 소문자로 소문자는 대문자로 변환하여 출력하는 프로그램을 작성하세요.
첫 줄에 문자열이 입력된다. 문자열의 길이는 100을 넘지 않습니다.
문자열은 영어 알파벳으로만 구성되어 있습니다.
첫 줄에 대문자는 소문자로, 소문자는 대문자로 변환된 문자열을 출력합니다.
StuDY
sTUdy
import java.util.Scanner;
public class Main {
public String solution(String string) {
String answer = "";
for (char x : string.toCharArray()) {
//x가 소문자라면
if (Character.isLowerCase(x)) {
//x를 대문자로 변환
answer += Character.toUpperCase(x);
} else {
//x가 대문자라면 x를 소문자로 변환
answer += Character.toLowerCase(x);
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
}
}
한 개의 문장이 주어지면 그 문장 속에서 가장 긴 단어를 출력하는 프로그램을 작성하세요. 문장속의 각 단어는 공백으로 구분됩니다.
첫 줄에 길이가 100을 넘지 않는 한 개의 문장이 주어집니다.
문장은 영어 알파벳으로만 구성되어 있습니다.
첫 줄에 가장 긴 단어를 출력한다.
가장 길이가 긴 단어가 여러개일 경우 문장속에서 가장 앞쪽에 위치한 단어를 답으로 합니다.
it is time to study
study
package section1;
import java.util.Scanner;
// 문장 속 단어
class Main {
public String solution(String str) {
String answer = "";
// m: 가장 긴 단어를 찾기 위한 변수
// 최댓값을 저장해야 하므로 변수 선언 시에 가장 작은 숫자로 초기화
int m = Integer.MIN_VALUE, pos;
/**
* (1) 띄어쓰기를 split()으로 각각의 단어를 구별
*/
// String[] s = str.split(" ");
// for (String x : s) {
// //단어의 길이 추출
// int len = x.length();
// //해당 단어길이가 변수 m보다 큰 수라면 m에 len값을 대입하고, answer에 단어 교제
// if (len > m) {
// m = len;
// answer = x;
// }
// }
// return answer;
/**
* (2) indexOf()로 띄어쓰기를 발견하지 못하였다면 -1를 리턴, 발견한다면 해당 인덱스 번호 리턴
*/
//**indexOf()** : 제공하는 문자 또는 문자열의 **인덱스 번호 반환**, **없으면 -1 반환**
while ((pos = str.indexOf(" ")) != -1) {
//substring(0, x) : 0부터 x-1까지 String 문자열을 자른다.
String tmp = str.substring(0, pos);
int len = tmp.length();
//"len이 m보다 크다"로 설정하는 이유는 문장속에서 가장 앞쪽에 위치한 단어를 답으로 해야되기 때문
if (len > m) {
m = len;
answer = tmp;
}
//"it is time to study" 문자열에서 "It "를 초기에 indextOf()로 pos = 3 을 리턴받았으므로,
// pos + 1 하여 인덱스 번호 4부터 subString()하여 "is time to study"을 str에 대입
str = str.substring(pos + 1);
}
//마지막 단어 "study"일 때는 while의 조건문을 적용했을 때 공백이 없으므로 while문이 종료
//따라서 마지막 단어의 길이가 m보다 큰 수라면 answer에 대입해주는 과정이 필요
if (str.length() > m) {
answer = str;
}
return answer;
}
public static void main(String args[]) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.nextLine();
System.out.println(T.solution(str));
}
}
N개의 단어가 주어지면 각 단어를 뒤집어 출력하는 프로그램을 작성하세요.
첫 줄에 자연수 N(3<=N<=20)이 주어집니다.
두 번째 줄부터 N개의 단어가 각 줄에 하나씩 주어집니다. 단어는 영어 알파벳으로만 구성되어 있습니다.
N개의 단어를 입력된 순서대로 한 줄에 하나씩 뒤집어서 출력합니다.
3
good
Time
Big
doog
emiT
giB!
<직접 코드로 뒤집을 때 다음과 같은 그림>
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
//특정 문자 뒤집기
class Main {
public List<String> solution(String[] strings){
List<String> answer = new ArrayList<>();
/**
* (1) StringBuilder 사용
*/
// //"string" 문자열을 StringBuilder 객체 생성 후 reverse()로 뒤집은 뒤 toString()으로 문자열로 리턴
// for (String string : strings) {
// //StringBuiler를 쓰는 이유 : String으로 객체를 만들어 값을 만들어 놓으면 변경할 수 없음 (불변)
// //따라서 String으로 만든 객체를 계속 대입하여 새로운 값으로 변경하면 새로운 객체로 만들어지는 문제점 발생
// //StringBuilder를 쓰면 값을 계속 변경해도 한 개의 객체를 가지고 계속해서 사용 가능
// String s = new StringBuilder(string).reverse().toString();
// answer.add(s);
// }
/**
* (2) 직접 코드로 뒤집기
*/
for (String string : strings) {
//"string" 문자열을 문자배열로 만듦
char[] s = string.toCharArray();
//lt: 문자배열의 첫번째 인덱스, rt: 문자배열의 마지막 인덱스
int lt = 0, rt = string.length() - 1;
while (lt < rt) {
//가변문자 tmp를 생성하여 운반 역할, 첫번째 인덱스 값 tmp에 대입
char tmp = s[lt];
//마지막 인덱스 값을 첫번째 인덱스 값에 대입
s[lt] = s[rt];
//tmp 값을 마지막 인덱스 값에 대입 => 첫번째 인덱스 값을 대입하는 것과 동일
s[rt] = tmp;
//첫번째 인덱스 + 1
lt++;
//마지막 인덱스 - 1
rt--;
}
//valueOf()는 위 메서드들과는 다르게 static으로 선언된 클래스 메서드인 점 주의
//문자를 문자열로 변경
String tmp = String.valueOf(s);
answer.add(tmp);
}
//특정 단어만 뒤집으라고 할 수 있다 -> 이땐 모든 문자열을 뒤집는 StringBuilder의 reverse() 사용 불가능
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
int number = kb.nextInt();
String[] strings = new String[number]; //배열 본체 생성 후 본체에 대한 참조 생성
for (int i = 0; i < number; i++) {
strings[i] = kb.next();
}
for (String s : T.solution(strings)) {
System.out.println(s);
}
}
}
영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고,
특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요.
첫 줄에 길이가 100을 넘지 않는 문자열이 주어집니다.
첫 줄에 알파벳만 뒤집힌 문자열을 출력합니다.
a#b!GE*T@S
S#T!EG*b@a
<양 끝에 lt, rt 모두 영문이므로 위치 변경>
<s와 a 위치 변경 이후, lt++ & rt -- 하여 한 칸씩 이동>
< lt가 위치한 값이 #이므로 특수문자여서 lt ++ , rt가 위치한 값이 @이므로 rt -- >
<T와 b가 모두 영문이므로 위치 변경 후 lt ++, rt - - >
< 완성본 >
import java.util.Scanner;
//특정 문자 뒤집기
class Main {
public String solution(String str) {
char[] charArray = str.toCharArray();
int lt = 0, rt = str.length() - 1;
while (lt < rt) {
//문자배열의 0번 인덱스의 값이 알파벳이 아닐 때 참
**//Character.isAlphabetic(x): x 문자의 알파벳 여부 T/F**
if (!Character.isAlphabetic(charArray[lt])) lt++;
//문자배열의 0번 인덱스의 값이 알파벳이 아닐 때 참
else if (!Character.isAlphabetic(charArray[rt])) rt--;
else{
char tmp = charArray[lt];
charArray[lt] = charArray[rt];
charArray[rt] = tmp;
lt++;
rt--;
}
}
String answer = String.valueOf(charArray);
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
}
}
소문자로 된 한개의 문자열이 입력되면 중복된 문자를 제거하고 출력하는 프로그램을 작성하세요.
중복이 제거된 문자열의 각 문자는 원래 문자열의 순서를 유지합니다.
첫 줄에 문자열이 입력됩니다. 문자열의 길이는 100을 넘지 않는다.
첫 줄에 중복문자가 제거된 문자열을 출력합니다.
ksekkset
kset
< indexOf()는 제공하는 문자의 인덱스 번호를 반환한다. 이때 k는 최초에 발견했을때가 0번 임을 알 수 있다. 이후에 나온 k는 중복이므로 동일하게 0번 인덱스를 리턴한다. >
import java.util.Scanner;
public class Main {
public String solution(String str) {
String answer = "";
for (int i = 0; i < str.length(); i++) {
//System.out.println(str.charAt(i) + " " + i + " " + str.indexOf(str.charAt(i)));
//최초에 발견된 indexOf 값과 i값이 동일하다면
if(str.indexOf(str.charAt(i)) == i){
answer += str.charAt(i);
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
}
}
앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.
문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력하는 프로그램을 작성하세요.
단 회문을 검사할 때 대소문자를 구분하지 않습니다.
첫 줄에 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.
첫 번째 줄에 회문 문자열인지의 결과를 YES 또는 NO로 출력합니다.
gooG
YES
여기서 포인트는 문자열을 뒤집는 것이 아니라 단순히 회문 여부를 판별해야 한다. 문자열을 뒤집지 않고 회문 여부 확인
문자 개수가 홀수 개여도 가운데 문자는 움직이지 않고 가만히 있기 때문에 비교할 필요 없다
import java.util.Scanner;
//회문 문자열
class Main {
public String solution(String str){
String answer = "NO";
/**
* (1) 문자배열의 인덱스 번호로 비교 ( length() / 2 사용 )
*/
// str = str.toUpperCase();
// int len = str.length();
// for (int i = 0; i < len / 2; i++) {
// if (str.charAt(i) != str.charAt(len - i - 1)) {
// answer = "NO"; // 이때 answer의 초기값은 "YES"로 되어있어야 함
// }
// }
/**
* (2) StringBuilder()의 reverse() 사용
*/
String string = new StringBuilder(str).reverse().toString();
**//equalsIgnoreCase(): 대소문자 무시**
if (str.equalsIgnoreCase(string)) {
answer = "YES";
}
return answer;
}
public static void main(String[] args) {
Main T = new Main ();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
}
}
(1) 문자배열의 인덱스 번호로 비교 ( length() / 2 사용 )
(2) StringBuilder()의 reverse() 사용
앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 팰린드롬이라고 합니다.
문자열이 입력되면 해당 문자열이 팰린드롬이면 "YES", 아니면 “NO"를 출력하는 프로그램을 작성하세요.
단 회문을 검사할 때 알파벳만 가지고 회문을 검사하며, 대소문자를 구분하지 않습니다.
알파벳 이외의 문자들의 무시합니다.
첫 줄에 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.
첫 번째 줄에 팰린드롬인지의 결과를 YES 또는 NO로 출력합니다.
found7, time: study; Yduts; emit, 7Dnuof
YES
import java.util.Scanner;
//유효한 팰린드롬
public class Main {
public String solution(String str) {
String answer = "NO";
//모두 대문자로 변경 후, 특수문자 모두 빼고 알파벳만 필터링
//**replaceAll**(): replace() 와는 다르게 "**정규식**" 사용 가능, **"[^A-Z]" 은 A-Z까지의 영문이 아닌 것들은 "" 빈문자로 변경**해라
str = str.toUpperCase().replaceAll("[^A-Z]", "");
//영대문자로 이루어진 str을 StringBuilder의 reverse() 메서드로 뒤집어 tmp 에 대입
String tmp = new StringBuilder(str).reverse().toString();
//뒤집어준 tmp와 뒤집기 전 str이 동일한 문자열이라면 answer는 "YES"
if (tmp.equals(str)) {
answer = "YES";
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.nextLine();
System.out.println(T.solution(str));
}
}
문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만듭니다.
만약 “tge0a1h205er”에서 숫자만 추출하면 0, 1, 2, 0, 5이고 이것을 자연수를 만들면 1205이 됩니다.
( => 앞에 있는 0은 무시되고, 1205만 자연수로 생성 )
추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.
첫 줄에 숫자가 섞인 문자열이 주어집니다. 문자열의 길이는 100을 넘지 않습니다.
첫 줄에 자연수를 출력합니다.
g0en2T0s8eSoft
208
< 아스키 코드에서 문자 ‘0’-’9’까지의 10진수 번호 >import java.util.Scanner;
//숫자만 추출
public class Main{
public int solution(String str) {
/**
* (1) 문자를 아스키 번호로 계산하여 실제 숫자 리턴
*/
// int answer = 0;
// for (char x : str.toCharArray()) {
// // 아스키번호가 48부터 57 사이에 있으면 문자 '0'부터 '9'의 값
// if (x >= 48 && x < 57) {
// //문자로 연산하게 되면 아스키 번호로 연산하게 됨 ( ex> 문자 '0' = 아스키번호 48 )
// //x애서 -48을 해야 실제 숫자값으로 반환, 곱하기 10은 자릿수 누적을 위해 사용
// answer = answer * 10 + (x - 48);
// }
// }
// return answer;
/**
* (2) 문자배열을 반복문 돌려, isDigit() 메소드를 이용해 문자 한 개씩 숫자인지 검증
*/
String answer = "";
for (char x : str.toCharArray()) {
if (Character.isDigit(x)) {
answer += x;
}
}
return Integer.parseInt(answer);
}
public static void main(String[] args) {
MainT = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
}
}
(1) 문자를 아스키 번호로 계산하여 실제 숫자 리턴
(2) 문자배열을 반복문 돌려, isDigit() 메소드를 이용해 문자 한 개씩 숫자인지 검증
한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출력하는 프로그램을 작성하세요.
첫 번째 줄에 문자열 s와 문자 t가 주어진다. 문자열과 문자는 소문자로만 주어집니다.
문자열의 길이는 100을 넘지 않는다.
첫 번째 줄에 각 문자열 s의 각 문자가 문자 t와 떨어진 거리를 순서대로 출력한다.
teachermode e
1 0 1 2 1 0 1 2 2 1 0
str의 각 문자와 문자 t와 떨어진 거리 출력이므로 모든 문자 자릿수에 숫자가 1개씩은 꼭 들어간다 => answer
(1) 좌->우 로 향하는 for문이 돌아야 함
(2) 우->좌 로 향하는 for문이 돌아야 함
이유는? 최소거리를 구하라고 했으므로 문자 t와 떨어진 거리여도 가까운 거리로 계산 되어야 함
그렇다면 (1)의 경우를 먼저 살펴보자
(1) 좌->우 로 향하는 for문이 돌아야 함
p = 1000
p++ (p=1001)
answer[0] = p+1 = 1001
p = 0
answer[1] = p = 0
p++ => p=1
answer[2] = p = 1
p++ => p=2
answer[3] = p = 2
p++ => p=3
answer[4] = p = 3
p = 0
answer[5] = p = 0
p++ => p=1
answer[6] = p = 1
p++ => p=2
answer[7] = p = 2
p++ => p=3
answer[8] = p = 3
p++ => p=4
answer[9] = p = 4
p = 0
answer[10] = p = 0
(2) 우->좌 로 향하는 for문이 돌아야 함 (노랑색은 값이 변경된 부분)
p = 1000
p = 0
p++ => p=1
**answer[9] = Math.min(answer[9], 1) = Math.min(4, 1) = 1**
p++ => p=2
**answer[8] = Math.min(answer[8], 2) = Math.min(3, 2) = 2**
p++ => p=3
answer[7] = Math.min(answer[7], 3) = Math.min(2, 3) = 2
p++ => p=4
answer[6] = Math.min(answer[6], 4) = Math.min(1, 4) = 1
p = 0
p++ => p=1
**answer[4] = Math.min(answer[4], 1) = Math.min(3, 1) = 1**
p++ => p=2
answer[3] = Math.min(answer[3], 2) = Math.min(2, 2) = 2
p++ => p=3
answer[2] = Math.min(answer[2], 3) = Math.min(1, 3) = 1
p = 0
p++ => p=1
**answer[0] = Math.min(answer[0], 1) = Math.min(1001, 1) = 1**
import java.util.Scanner;
//가장 짧은 문자거리
public class Main {
public int[] solution(String str, char t) {
// answer: 문자열 str의 각 문자가 문자 t와 떨어진 거리를 int 배열로 str 문자 인덱스 수 만큼 생성
int[] answer = new int[str.length()];
// p: 거리, 초기값은 아주 크게 놓고 시작 (문자와 문자 사이 거리는 100을 넘지 않는 것을 명심)
int p = 1000;
// 배열 answer 좌->우 for문
for (int i = 0; i < str.length(); i++) {
// str의 문자 한 개가 문자 t와 동일한 문자라면 p=0 으로 변경하고 answer의 인덱스 번호 값을 0으로 함
if (str.charAt(i) == t) {
p = 0;
answer[i] = p;
} else {
p++;
answer[i] = p;
}
}
p = 1000;
// 배열 answer 우->좌 for문
for (int i = str.length()-1; i >= 0; i--) {
if (str.charAt(i) == t) {
// answer의 인덱스 번호 값은 이미 0으로 되어 있으므로 p만 0으로 변경
p = 0;
} else {
p++;
// Math.min(a,b): 기존 값(=a)과 p(=b) 중에서 작은 값을 넣어줌
answer[i] = Math.min(answer[i], p);
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
// 문자열 입력
String str = kb.next();
// 문자 한개 입력
char c = kb.next().charAt(0);
for (int x : T.solution(str, c)) {
System.out.print(x+" ");
}
}
}
알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는 문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하시오.
단 반복횟수가 1인 경우 생략합니다.
첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.
첫 줄에 압축된 문자열을 출력한다.
KKHSSSSSSSE
K2HS7E
KSTTTSEEKFKKKDJJGG
KST3SE2KFK3DJ2G2
import java.util.Scanner;
//문자열 압축
public class Main{
public String solution(String str) {
String answer = "";
// 같은 문자가 연속으로 반복되는 경우 문자 바로 오른쪽에 반복 횟수 표기를 위해서 cnt 선언 및 초기화
int cnt = 1;
// str.charAt(str.length()) : 마지막 인덱스 번호 + 1 의 값이 존재하지 않아 if문에서 에러가 발생하므로 빈문자 추가
str = str + " ";
// str의 인덱스 번호 1개가 추가되었으므로 범위를 -1 좁혀즘
for (int i = 0; i < str.length() - 1; i++) {
// 현배 i번호 인덱스 값과 i+1번호 인덱스 값이 같다면
if (str.charAt(i) == str.charAt(i + 1)) {
// cnt 1 증가
cnt++;
} else {
// 같지 않다면 answer에 i 인덱스 문자 값 추가
answer += str.charAt(i);
// cnt가 1보다 크면 문자 값 뒤에 cnt를 붙여줌
if (cnt > 1) {
answer += String.valueOf(cnt);
// cnt 초기화
cnt = 1;
}
}
}
return answer;
}
public static void main(String[] args) {
MainT = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
}
}
현수는 영희에게 알파벳 대문자로 구성된 비밀편지를 매일 컴퓨터를 이용해 보냅니다.
비밀편지는 현수와 영희가 서로 약속한 암호로 구성되어 있습니다.
비밀편지는 알파벳 한 문자마다 # 또는 *이 일곱 개로 구성되어 있습니다.
만약 현수가 “#*#”으로 구성된 문자를 보냈다면 영희는 현수와 약속한 규칙대로 다음과 같이 해석합니다.
“#*#”를 일곱자리의 이진수로 바꿉니다. #은 이진수의 1로, *이진수의 0으로 변환합니다. 결과는 “1000001”로 변환됩니다.
바뀐 2진수를 10진수화 합니다. “1000001”을 10진수화 하면 65가 됩니다.
아스키 번호가 65문자로 변환합니다. 즉 아스크번호 65는 대문자 'A'입니다.
참고로 대문자들의 아스키 번호는 'A'는 65번, ‘B'는 66번, ’C'는 67번 등 차례대로 1씩 증가하여 ‘Z'는 90번입니다.
현수가 4개의 문자를 다음과 같이 신호로 보냈다면
#**###############**
이 신호를 4개의 문자신호로 구분하면
#****## --> 'C'
#**#### --> 'O'
#**#### --> 'O'
### --> 'L'
최종적으로 “COOL"로 해석됩니다.
현수가 보낸 신호를 해석해주는 프로그램을 작성해서 영희를 도와주세요.
첫 줄에는 보낸 문자의 개수(10을 넘지 안습니다)가 입력된다. 다음 줄에는 문자의 개수의 일곱 배 만큼의 #또는 * 신호가 입력됩니다.
현수는 항상 대문자로 해석할 수 있는 신호를 보낸다고 가정합니다.
영희가 해석한 문자열을 출력합니다.
4
#**###############**
COOL
#**###############** -> 1000011100111110011111001100 -> 1000011 1001111 1001111 0011100 -> 67 79 79 76
<아스키 코드>import java.util.Scanner;
//암호
public class Main {
public String solution(int n, String str) {
String answer = "";
for (int i = 0; i < n; i++) {
//#****###**#####**#####**##**라면 0번 부터 7번 인덱스 전까지 문자열을 뽑아냄
/**/replace(a,b)** : a 문자를 b문자로 변경 (문자열도 가능)
String tmp = str.substring(0, 7).replace('#', '1').replace('*', '0');
//**Integer.parseInt(tmp, 2)** : **tmp 문자열이 2진수임을 명시하고, 이를 10진수로 변환**
int num = Integer.parseInt(tmp, 2);
//10진수를 문자로 변경하여 아스키 코드로 나타냄
answer += (char) num;
//뽑아낸 이후 7번 인덱스 이후 문자열을 str에 대입(7번, 14번, 21번, 28번..)
str = str.substring(7);
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
int number = kb.nextInt();
String str = kb.next();
System.out.println(T.solution(number, str));
}
}
문자열의 길이 : length(), 배열의 길이 : length