[자바 알고리즘 입문]String-1. 문자찾기

손홍서·2023년 3월 5일

Algorithm

목록 보기
2/4
post-thumbnail

문제


입력받은 문자열을 차례로 탐색하면서 입력받은 특정문자와 동일한 문자일 경우 카운팅을 해주면 되는 간단한 문제이다.

내가 작성한 처음 코드

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String str = in.nextLine().toLowerCase();
        char ch = in.next().toLowerCase().charAt(0);
        int cnt = 0;
        
        for(int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == ch) cnt++;
        }

        System.out.println(cnt);
    }
}

오랜만에 푸는 알고리즘 문제라 class 만드는 것도 좀 어색해서 반성중이다. char형식 어떻게 입력 받는지 몰라 구글링도 해서 완전 내 힘으로 풀었다고 말하기 어렵다.

강의 코드

import java.util.*;

public class Main {
	public int solution(String str, char t) {
    	int answer = 0;
        str = str.toUpperCase();
        t = Character.toUpperCase(t);
        
        for(char x : str.toCharArray()) {
        	if (x == t) answer ++;
        }
        return answer;
    }
    
    public static void main(String[] args) {
    	Main T = new Main();
        Scanner in = new Scanner(System.in);
        String str = in.next();
        char c = in.next().charAt(0);
        System.out.print(T.solution(str, c));
         
    }
}

처음 코드에서도 for-each 문 사용하고 싶었는데 String 타입을 그대로 사용하니 오류가 나서 사용못했다. String 타입의 문자열을 char 타입의 배열로 바꿔주는 친절한 toCharArray()를 사용하면 된다.

오늘의 궁금한 점

str.next()와 str.nextLine()의 차이점

개행문자를 읽느냐 안읽느냐 차이이다.

  • next()는 버퍼에 입력된 문자나 문자열에서 공백 전까지의 단어를 읽고 개행 문자를 가져오지 않는다.
Scanner in = new Scanner(System.in);
System.out.print(in.next());


입력: Hello World!
출력: Hello

  • nextLine()은 엔터를 치기 전까지의 문자 또는 문장 전체를 입력받는다. 즉 버퍼에 입력된 문자열을 개행 문자까지 다 가져온다.
Scanner in = new Scanner(System.in);
System.out.print(in.nextLine());

입력: Hello World!
출력: Hello World!

public static void main(String[] args)의 의미

  • public: 모든 곳에서 접근 가능하도록
  • static: main은 프로그램이 실행되면 자동으로 호출되어 실행되는 함수이므로 garbage collector에 의해 정리되지않고 항상 메모리에 상주하도록 설정하기 위해
  • void: return 값이 없다. main 함수가 종료되는 것은 프로그램이 종료되는 것이므로 return 값은 필요없고 의미 없다.
  • String[] args: main함수는 프로그램을 실행할 때 처음 수행되는 함수이므로 외부로부터 값을 입력받을 수 있어야하기 때문이다. 그리고 API 에서는 public static void main (String[] args)단 한개만 엔트리 포인트로 정의했기에 꼭 파라미터 작성을 해줘야한다.
profile
Hello World!!

0개의 댓글