개발놀이터
1-1. 문자 찾기 본문
package string.findletter.my;
import java.util.Scanner;
public class Main {
/**
* 문제점
* 1. inputSecond 를 String 이 아니라 char 로 받아서 하는게 더 깔끔함
* 2. divideLetter 메서드를 사용 했는데 이거 굳이 필요한가? 싶은 생각
*
* 해결방안
* 1. inputSecond 를 char 로 받아서 한글자만 비교하면 된다.
* 2. charAt 을 적극 이용하면 divideLetter 필요없다.
*/
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String inputFirst = input.nextLine();
String inputSecond = input.nextLine();
String lowerCaseFirst = inputFirst.toLowerCase();
String lowerCaseSecond = inputSecond.toLowerCase();
String[] character = divideLetter(lowerCaseFirst);
System.out.println(getCount(lowerCaseFirst, lowerCaseSecond, character));
}
private static int getCount(String lowerCaseFirst, String lowerCaseSecond, String[] character) {
int cnt = 0;
for (int i = 0; i < lowerCaseFirst.length(); i++) {
if (character[i].equals(lowerCaseSecond)) {
cnt++;
}
}
return cnt;
}
private static String[] divideLetter(String lowerCaseFirst) {
String character[] = new String[100];
for (int i = 0; i < lowerCaseFirst.length(); i++) {
String substring = lowerCaseFirst.substring(i, i+1);
character[i] = substring;
}
return character;
}
}
너무 간단한 문제지만 너무 복잡하게 풀었다... 개인적인 코드 리뷰와 리팩토링을 진행한 코드는 다음과 같다.
package string.findletter.my;
import java.util.Scanner;
public class Refactoring {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String inputFirst = input.next();
char inputSecond = input.next().charAt(0);
String lowerCaseFirst = inputFirst.toLowerCase();
char lowerCaseSecond = Character.toLowerCase(inputSecond);
System.out.println(getCount(lowerCaseFirst, lowerCaseSecond));
}
private static int getCount(String lowerCaseFirst, char lowerCaseSecond) {
int cnt = 0;
for (int i = 0; i < lowerCaseFirst.length(); i++) {
if (lowerCaseFirst.charAt(i) == lowerCaseSecond) {
cnt++;
}
}
return cnt;
}
}
키 포인트는 charAt 사용이었던 것 같다.
아래는 선생님의 풀이
package string.findletter.teacher;
import java.util.Scanner;
public class Main {
public int solution(String str, char t) {
int answer = 0;
str = str.toUpperCase();
t = Character.toUpperCase(t);
/*for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == t) {
answer++;
}
}*/
for (char x : str.toCharArray()) {
if (x == t) answer++;
}
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);
System.out.println(T.solution(str, c));
}
}
'기타 > 코딩테스트' 카테고리의 다른 글
1-6. 중복된 문자 제거 (0) | 2023.02.07 |
---|---|
1-5. 특정 문자 뒤집기 (0) | 2023.02.07 |
1-4. 단어 바꾸기 (0) | 2023.02.07 |
1-3. 문장 속 단어찾기 (0) | 2023.02.07 |
1-2. 대소문자 변환 (0) | 2023.02.07 |