//입력
Computercooler
c
//출력
2
Class String 1{
public static int solution(String str,char c){
int answer = 0;
String s = str.toUpperCase();
char t = Character.toUpperCase(c);
for(int i=0; i<s.length(); i++){
if(s.charAt(i)==t){
answer ++;
}
}
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
char c = sc.next().charAt(0);
System.out.println(solution(str,c));
}
}
풀이
1.입력받은 두 문자를 str.toUpperCase()로 대문자로 만들기
2.str.length까지 for문 돌려서 입력받은 문자 c가 문자열 s의 문자와 같으면 answer ++
[ 주요 기능 ]
String.toUpperCase() : 문자열 대문자 변경
Character.toUpperCase(char) : 문자 대문자 변경
String.charAt(index) : 문자열 문자 접근
//입력
StuDY
//출력
sTUdy
class String2 {
public static String solution(String str) {
String answer = "";
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (Character.isUpperCase(c)) {
answer += Character.toLowerCase(c);
}
else if (Character.isLowerCase(c)) {
answer += Character.toUpperCase(c);
}
}
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(solution(str));
}
}
풀이
1.문자열 입력받고 문자열 길이 만큼 for문
2.문자열 단어 하나하나가 대문자면 소문자로, 소문자면 대문자로 변경해서 answer에 저장 후 리턴
[ 주요 기능 ]
string.charAt(index) : 문자열 문자접근
Character.isUpperCase() : 대문자인지 판별
Character.toUpperCase() : 대문자로 변경
Character.isLowerCase() : 소문자인지 판별
Character.toLowerCase() : 소문자로 변경
//입력
it is time to study
//출력
study
class String3 {
public static String solution(String str) {
String answer = "";
String[] s = str.split(" ");
int len =0;
for(String x : s){
if(x.length() > len) {
len = x.length();
answer = x;
}
}
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(solution(str));
}
}
풀이
1.split(" ")을 이용해서 공백기준으로 문자열을 잘라서 배열로 받는다.
2.for each문으로 배열의 인덱스에 접근
3.접근한 String x의 길이가 젤 긴 걸 len라 하고 x의 길이가 저장된 len의 길이보다 커야지만 len가 바뀐다. 그렇게 answer = x 로 리턴
[ 주요 기능 ]
string.split("") : 문자열을 ("")기준으로 분리하여 배열로 반환한다.
forEach문으로 배열의 요소에 접근
Scanner입력받을때 nextLine()으로 해야 공백도 인식한다.
//입력
3
good
Time
Big
//출력
doog
emiT
giB
class String4 {
public static ArrayList<String> solution(int n, String[] str) {
ArrayList<String> answer = new ArrayList<>();
for(String x : str){
char[] c = x.toCharArray();
int lt = 0;
int rt = x.length() - 1 ;
while(lt < rt){
char tmp = c[lt];
c[lt] = c[rt];
c[rt] = tmp;
lt++;
rt--;
}
String s = String.valueOf(c);
answer.add(s);
}
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
String[] str = new String[n];
for(int i=0; i<n; i++){
str[i] = sc.next();
}
for(String x : solution(n,str)){
System.out.println(x);
}
}
}
풀이
1.일단 Scanner입력을 몇개 입력할 것인지 n을 입력받는다. 이후에 스트링 배열을 만들어서 n개 만큼 문자열을 입력할수있게 Scanner입력해주고soulution 함수에서 리턴값은 동적 배열이다.
2.forEach문으로 스트링배열에 접근 후, toCharArray()를 이용해서 접근한 string문자열을 char문자로 이루어진 char[]배열로 만든다.
3.lt,rt를 선언해준다. 각각 char[]의 왼쪽 끝, 오른쪽 끝을 뜻한다.
4.while문을 이용해서 문자를 뒤집는다.
5.charArray형태의 char[]이기 때문에 String.valueof()를 이용해서 string 형태로 바꿔서 .add를 이용해서 answer 동적배열에 추가한 후에 리턴
[ 주요 기능 ]
toCharArray() : 문자열 String을 char[] 형태로 변환
lt,rt를 이용한 문자배열 스위치
String.valueOf() : string 형태로 변환
.add : 배열에 string 추가
//입력
a#b!GE*T@S
//출력
S#T!EG*b@a
class String5 {
public static String solution(String str){
String answer = "";
char[] c = str.toCharArray();
int lt =0;
int rt =c.length -1 ;
while( lt < rt){
if(!Character.isAlphabetic(c[lt])){
lt ++;
}
else if(!Character.isAlphabetic(c[rt])){
rt --;
}
else{
char tmp = c[lt];
c[lt] = c[rt];
c[rt] = tmp;
lt ++;
rt --;
}
}
answer = String.valueOf(c);
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(solution(str));
}
풀이
1.문자열을 입력받아서 string.toCharArray()를 이용해 char[] 형태로 바꾼다.
2.lt, rt를 선언해준다
3.while문과 if문을 이용해 알파벳인지 아닌지 판별한 후에 아니라면 lt++,rt--를 각각해준다. 지나친다는 뜻
4.이제 또 다른 경우는 알파벳인 경우이기 때문에 문자를 뒤집는다
5.char[]이기 때문에 String.valueOf()를 이용해서 리턴
[ 주요 기능 ]
String.toCharArray() : 문자열을 char[]형태로
Character.isAlphabetic() : 앞에 Character가 붙어서 char형태의 문자를 알파벳인지아닌지 확인 하는 메서드
String.valueOf() : String 형태로 변환
//입력
ksekkset
//출력
kset
class String6 {
public static String solution(String str){
String answer = "";
for(int i=0; i<str.length(); i++){
if(i == str.indexOf(str.charAt(i))){
answer += str.charAt(i);
}
}
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(solution(str));
}
}
풀이
1.for문으로 str문자열의 길이의 끝가지 돌고
2.indexOf를 이용해서 str.charAt(i)문자가 현재 i(index)랑 같은지 비교해서 answer에 저장
[ 주요 기능 ]
stirng.indexOf() : 현재 문자열의 인덱스가 처음 발견되는 인덱스 위치를 반환한다.
//입력
gooG
//출력
YES
public class String7 {
public static String solution(String str){
String answer = "";
String s = str.toUpperCase();
String reverse = "";
for (int i = s.length() - 1; i >= 0; i--) {
reverse += s.charAt(i);
}
if(s.equals(reverse)) answer = "YES";
else answer = "NO";
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(solution(str));
}
}
풀이
1.문자열을 입력받아서 다 대문자로 바꿔준다
2.reverse라는 문자열을 만들어서 for문으로 s.charAt(i)을 역순으로 reverse에 저장한다. 그 후에 s.equals(reverse)를 이용해서 if문으로 결과값 리턴
[ 다른 방식 ]
StringBuffer sb = new StringBuffer(s);
String reverse = sb.reverse().toString();
Stringbuffer라는 객체를 이용해서 문자열 s를 Stringbuffer에 담고 그것을 .reverse() 시켜서 간단하게 풀수도 있다.
[ 주요기능 ]
for (int i = s.length() - 1; i >= 0; i--) : 문자열 역순으로 for문
stringA.equals(stringB) : 두 문자 같은지 비교
StringBuffer : 문자열을 담아서 .revse().toString()으로 역순으로 바꾸고 다시 string 형태로 바꿔줄 수 있다.
//입력
found7, time: study; Yduts; emit, 7Dnuof
//출력
YES
public class String8 {
public static String solution(String str){
String answer = "";
String s = str.toUpperCase();
String match = "[^A-Z]";
s = s.replaceAll(match, "");
String reverse = new StringBuffer(s).reverse().toString();
if(s.equals(reverse)) answer ="YES";
else answer="NO";
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(solution(str));
}
}
풀이
1.우선, 특수문자나 공백 등 알파벳을 다 제외하고 문자들 끼리의 역순이 맞는지 비교하는 문제이다. 대소문자 상관없다. 그렇기 때문에 받은 문자열 str을 UpperCase() 해준다.
2.replaceAll(정리할 문자,""); 이라는 함수를 이용해서 필요없는 문자를 정리한다.
3.그 후에 StringBuffer(s).reverse().toString();을 이용해서 역순 문자를 만든다
3-2. for문을 역순으로 새로운 문자열을 만들어서 저장해도된다.
4.s.equals(reverse);를 이용해서 비교 후 값 리턴
[ 주요 기능 ]
string.replaceAll.(match,"") : 첫번째 인자값은 어떤 문자를 제외할것인지를 넣는 공간이고, 두 번째는 정리한 문자의 공간을 어떻게 매꿀것인가에 대한 공간이다.
예제에서는 String match = "[^A-Z]"; 이런 식으로 해서 알파벳 A-Z가 아닌 것을 match로 정의 했다 ('^' == 부정)
StringBuffer(string).reverse().toString() : Stringbuffer에 문자열 담아서 역순으로 뒤집고 다시 문자열로
//입력
g0en2T0s8eSoft
//출력
208
public class String9 {
public static String solution(String str){
String answer = "";
String match = "[^0-9]";
str = str.replaceAll(match, "");
answer += Integer.parseInt(str);
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(solution(str));
}
}
풀이
1.문자열을 입력받고 숫자를 제외한 모든 문자를 replaceAll(match,"") 한다.
2.Integer.parseInt(str)을 이용해서 정수로 만들어 준다. -> 0208 -> 208
주요 기능
replaceAll(match,"")
Integer.parseInt(str) : 문자를 정수 숫자로.
//입력
teachermode e
//출력
1 0 1 2 1 0 1 2 2 1 0
public class String10 {
public static int[] solution(String s, char t){
int[] answer = new int[s.length()];
//0번인덱스 왼쪽에는 t가 없기때문에 0값 들어가는 거 방지용
int p=1000;
for(int i=0; i<s.length(); i++){
if(s.charAt(i) == t){
p=0;
answer[i] = p;
}
else {
p++;
answer[i] = p;
}
}
p=1000; //초기화
for(int i=s.length()-1; i>=0; i--){
if(s.charAt(i) == t){
p=0;
}
else{
p++;
//둘 중에 작은 값
answer[i] = Math.min(answer[i],p);
}
}
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
char c = sc.next().charAt(0);
for(int x : solution(str, c)){
System.out.print(x + " ");
}
}
}
풀이
1.입력 값은 String s, char t 이고, return 값은 int[] answer 로 생성. 문자를 입력하고 char t -> 'e'라고 가정하자.
2.answer[]에 p라는 값을 담을 것이다. 우선 왼쪽에 있는 e를 기준으로 오른쪽으로 for문을 돌려서 왼쪽의 e와의 거리에따라 p++시켜서 answer[i]에 값을 넣고, e가 나온다면 p=0;으로 초기화 시킨다음 다시 ++ 시키면서 answer[i]를 채워나간다.
3.이번엔 [] 뒤에서 부터 앞으로 for문을 돌린다. 오른쪽 e와의 거리를 측정한다. 처음 for문과 같이 e랑 같으면 p=0;으로 초기화시키고 e랑 다르면 p++해서 answer[i]에 값을 채워나간다. 근데 여기서는 현재 존재하는 answer[i]와 p를 비교 즉, Math.min(answer[i],p)를 해서 최솟값을 배열에 담아서 answer[]를 완성시킨 후 리턴한다.
[ 주요 기능 ]
배열의 양 끝 같의 오른쪽 왼쪽에는 e가 없기 때문에 그 위치의 배열에는 p=1의 값이 저장될수 있기 때문에 p를 아예관계없는 숫자로 지정한다.
//입력
KKHSSSSSSSE
//출력
K2HS7E
public static String solution(String str){
String answer = "";
str = str + " ";
int p=1;
for(int i=0; i<str.length()-1; i++){
if(str.charAt(i) == str.charAt(i+1)){
p++;
}
else if(str.charAt(i) != str.charAt(i+1)){
answer += str.charAt(i);
if(p>1) {
answer += String.valueOf(p);
}
p=1;
}
}
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(solution(str));
}
풀이
1.str을 입력받아 p라는 int형 정수를 1로 초기화한다.
2.str을 for문을 돌리고 str.CharAt(i) == str.CharAt(i+1)인지 비교하고 맞으면 p++ 아니면 str.CharAt(i)를 answer에 저장. 그리고 p가 1보다 크면 같이 answer에 저장. 그런식으로 answer 리턴
3. i+1을 for문으로 하기 때문에 range error 방지용으로 처음에 str에 + " "로 한자리 더 만들어준다.
[ 주요 기능 ]
String.valueOf(p) : int형을 string형으로 변환
//입력
4
#****###**#####**#####**##**
//출력
COOL
public static String solution(int n, String str){
String answer ="";
for(int i=0; i<n; i++){
String tmp = str.substring(0,7).replace('#','1').replace('*','0');
int num = Integer.parseInt(tmp,2);
answer += (char) num;
str = str.substring(7);
}
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String str = sc.next();
System.out.println(solution(n,str));
}
풀이
1.하나의 문자열을 받아서 n개의 암호문자를 만드는 문제이다.
2.subString(0,7)을 해줘서 7문자씩 짜르고 '#'->1,'*'->0 으로 2진수로이루어진 문자로 만들어준다. 그 문자열을 integer.parseInt(tmp,2)해서 2진수를 10진수로 변환해준다. 그러고 그 숫자를 (char) num 해줘서 그 숫자번호에 맞는 문자로 변환해서 answer에 담는다.
3.그 후에 다시 str = str.substring(7)해줘서 계속 7문자씩 자른다.
[ 주요기능 ]
string.substring(0,7) : 0~6번 인덱스 까지 7문자 짜른다.
sting.substring(7) : 7번 인덱스 부터 다시.
Integer.parseInt(tmp,2) : 2진주를 주입받아서 10진수 정수로 변환
(char) num : int 형 num을 char형 문자로 변환.