개발놀이터

1-1. 문자 찾기 본문

기타/코딩테스트

1-1. 문자 찾기

마늘냄새폴폴 2023. 2. 7. 05:34

 

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