오늘보다 더 나은 내일의 나에게_

자바 알고리즘 문제 풀이 String Q01_문자 찾기 본문

ALGORITHM/inflearn_javaAlgorithm

자바 알고리즘 문제 풀이 String Q01_문자 찾기

chan_96 2022. 1. 22. 23:41
728x90
설명

한 개의 문자열을 입력받고, 특정 문자를 입력받아 해당 특정 문자가 입력받은 문자열에 몇 개 존재하는지 알아내는 프로그램을 작성하세요.

대소문자를 구분하지 않습니다. 문자열의 길이는 100을 넘지 않습니다.


입력

첫 줄에 문자열이 주어지고, 두 번째 줄에 문자가 주어진다.

문자열은 영어 알파벳으로만 구성되어 있습니다.


출력

첫 줄에 문자열이 주어지고, 두 번째 줄에 문자가 주어진다.

문자열은 영어 알파벳으로만 구성되어 있습니다.




예시 입력1


예시 출력

Computercooler
c
2


 

코드

내가 입력한 코드

package String;

import java.util.Scanner;

public class Q01 {
	public static int print1(String str1, String str2) {
		int result = 0;
		//charAt:지정한 index번째에 문자를 반환한다.
		
		for (int i = 0; i < str1.length(); i++) {
			String a = str1.toUpperCase().charAt(i)+"";
			String b = str1.toLowerCase().charAt(i)+"";
			if(str2.equals(a) || str2.equals(b)) {
				result++;
			}
		}
		
		return result;
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String str1 = sc.next();
		String str2 = sc.next();
		System.out.println(print1(str1,str2));
	}
}


해설 코드

import java.util.*;
class Main{	
	public int solution(String str, char t){
		int answer=0;
		str=str.toUpperCase();
		t=Character.toUpperCase(t);
		//System.out.println(str+" "+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.print(T.solution(str, c));
	}
}

 

 

풀이 및 정리 

먼저 알고리즘 문제풀이는 백준 사이트에서 기초 10~20문제 풀어본 게 다였다. 하지만 문제 푸는 곳에서 프로그래머스의 문제풀이 방식에 초점을 맞춰있었다. 메서드를 만들어 main에서 호출해서 사용하는 게 너무 낯설었다. 문제는 맞췄지만 메서드도 엉망으로 작성했다. 


- static메서드로 할 필요가 없고 main에서 객체를 생성해 메서드에 접근하면 된다!

- main에서 입력받을 때 next()는 문자열을 반환하므로 charAt() 메서드를 사용해 char 타입으로 변수를 생성한다.

charAt()
=> 지정한 index번째에 문자를 반환한다. (반환타입 char)


- 문제에서 대소문자를 구분하지 않으니 입력받은 문자열과 문자를 둘 다 대문자든 소문자든 둘 중하나로 통일시켜서 값을 구하면 훨씬 효율적이다.
=> toUpperCase(), toLowerCase() 둘 중 하나를 사용해야 하는데 타입이 char일 경우 래퍼 클래스 Character를 사용해서 메서드를 사용해준다.


- 일반 for문 대신 향상된 for문도 사용할 수 있다. 하지만 향상된 for문은 배열에서 사용하기 때문에 String 타입 str을 toCharArray()를 사용해 배열로 만들어 준다.

toCharArray() => 문자열을 한 글자씩 쪼개서 char타입의 배열로 만들어준다.
728x90
Comments