코딩테스트/기타
[문자열] 문자 찾기 .java
머밍
2024. 8. 28. 16:39
문제
설명한 개의 문자열을 입력받고, 특정 문자를 입력받아 해당 특정문자가 입력받은 문자열에 몇 개 존재하는지 알아내는 프로그램을 작성하세요.
조건
대소문자를 구분하지 않습니다.문자열의 길이는 100을 넘지 않습니다. 문자열은 영어 알파벳으로만 구성되어 있습니다.
- 입력: 첫 줄에 문자열이 주어지고, 두 번째 줄에 문자가 주어진다.
- 출력: 첫 줄에 해당 문자의 개수를 출력한다.
예시 입력 1
Computercooler
c
예시 출력 1
2
첫번째 풀이
입력받을 때 둘 다 문자열로 입력받았으며 for문으로 구했다.
갑자기 char형 문자를 대소문자로 변경하는 메서드가 생각나지 않아서 이렇게 구현하였다...
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String find = sc.next();
str = str.toLowerCase();
find = find.toLowerCase();
int answer = 0;
for(int i=0;i<str.length();i++){
if(str.charAt(i)==find.charAt(0)){
answer++;
}
}
System.out.println(answer);
}
}
두번째 풀이
char형으로 받고 for문도 효율적으로 재구성했다.
검색해서 char형의 메서드를 알아와서 다시 풀었다
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//입력 받기
String str = sc.nextLine();
char find = sc.next().charAt(0);
//소문자로 변환
str = str.toLowerCase();
find = Character.toLowerCase(find);
int answer = 0;
for(char c : str.toCharArray()){
if(c == find){//일치하면 횟수 증가
answer++;
}
}
System.out.println(answer);
}
}
다른 풀이
solution 함수를 구현하여 푸는 방식인데, 프로그래머스 풀이할 때 쓰던 형식과 유사하다
하지만 전체 코드를 구현한다는 점에서 백준 풀이 방식과 프로그래머스 풀이가 섞인 풀이 방식이다
import java.util.Scanner;
class Main {
public int solution(String str, char t){//non-static
int answer = 0;
//대문자로 변환
str = str.toUpperCase();
t = Character.toUpperCase(t);
/*for(int i = 0; i < str.length(); i++){
if(str.charAt(i) == t){//string 변수를 인덱스로 접근
answer++;
}
}*/
for(char x : str.toCharArray()){//string 변수인 str를 문자 배열로 생성
if(x == t) answer++;
}
return answer;
}
public static void main(String[] args) {
Main T = new Main(); //클래스 객체 생성 (static 아니라서)
Scanner kb = new Scanner(System.in);
String str = kb.next();//문자열 하나 읽기
char c = kb.next().charAt(0); //문자 하나 읽기
System.out.println(T.solution(str, c));
}
}