그 중 첫 번째 문제는 아래와 같다.

이 문제의 요구사항은 이렇게 정리할 수 있다.
첫 번째로 입력받은 문자열에서, 두 번째로 입력받은 문자의 개수를 count하기(대소문자 구분 없이)
여기서 대소문자를 구분하지 않는다는것은 이런 의미이다.
ex1. "aAbbBBcccCCC" , 'c' 가 입력되었을 때 입력받은 문자열에서 대문자 C와 소문자 c를 모두 count 하라!
이에 대한 나의 해결 로직은 아래와 같다.
입력받은 문자열도 모두 대문자로 변환하고 , 입력받은 문자도 모두 대문자로 변환하여 , 변환된 문자열 안에서 변환된 문자가 사용된 갯수를 count하자
이렇게 해결한 이유는 ,
결국 대소문자를 구분하지 않는다는 의미는 대문자와 소문자를 모두 count하라는 의미이기 때문에,
대문자와 소문자를 하나의 통일된 형식으로 변환시키면 (여기서는 대문자),
단순하게 해당 문자열에서 해당 문자가 사용된 횟수를 count하는것 만으로
대문자와 소문자가 모두 count 되기 때문이다.
위의 로직을 기반으로 작성한 나의 코드는 이러하다.
import java.util.Scanner;
public class Main {
public int solution(String str, char c){
int cnt = 0;
char[] chars = str.toCharArray();
for (char c2 : chars) {
if(c == c2) cnt++;
}
return cnt;
}
public static void main(String[] args){
//0. Scanner 준비
Scanner sc = new Scanner(System.in);
//1. 문자열과 , 문자 하나를 입력 받음 -> 이때 모두 대문자로 가공시켜 변수에 저장
String str = sc.next().toUpperCase();
char c = sc.next().toUpperCase().charAt(0);
//2. solution을 호출하여 , 해당 문자열에서 , 해당 문자의 개수를 count
Main T = new Main();
int resultCnt = T.solution(str, c);
//3. count한 결과를 출력
System.out.println(resultCnt);
}
}
이 문제에 대한 선생님의 코드는 아래와 같다
import java.util.*;
class Main {
public ArrayList<Integer> solution(int n, int[] arr){
ArrayList<Integer> answer = new ArrayList<>();
answer.add(arr[0]);
for(int i=1; i<n; i++){
if(arr[i]>arr[i-1]) answer.add(arr[i]);
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n=kb.nextInt();
int[] arr=new int[n];
for(int i=0; i<n; i++){
arr[i]=kb.nextInt();
}
for(int x : T.solution(n, arr)){
System.out.print(x+" ");
}
}
}
이 문제를 해결하면서 배운 내용
1. 늘 헷갈리지만 , next() 메서드는 콘솔입력을 받은 data를 String으로 반환한다.
2. 문자열 객체에서 특정 char를 추출하는 메서드 : charAt()
3. 문자열 객체를 char 배열로 변환하여 추출해주는 메서드 : toCharArray()