[자바] 백준 2577 : 숫자의 개수

오늘·2021년 3월 23일
0

문제풀기

목록 보기
23/24

(문제)


풀이 1.

Scanner로 사용자에게 숫자를 받아
Integer.toString(value) 로 문자형으로 변환한 다음
하나하나 for문으로 돌리며 세어주는 방법

Scanner sc = new Scanner(System.in);
int count = 0, result;
String result1;
		
result = sc.nextInt() * sc.nextInt()* sc.nextInt();
result1 = Integer.toString(result);
		
// 숫자를 0~9까지 돌릴거다 i 범위 잡아주기
for (int i = 0; i < 10; i++) {
	// result1 의 문자열 길이만큼만 돌리겠다 j 범위 잡아주기
	for (int j = 0; j < result1.length(); j++) {
		// result1의 한글자씩 똑 떼어서 i(에 저장된 수)와 비교해 같으면
		// count의 값을 1씩 올려준다
		if ((result1.charAt(j) - '0') == i) {
			// 조건문에 -'0' 해주는 것은
			// 아스키 코드로 하는 것이 아니라는 것을
            		//컴퓨터에게 표시해주는것
			count++;
		}
	}
	System.out.println(count);
    	// count 값 초기화
        // 해주지 않으면 값이 누적된다.
	count = 0;
}

charAt()을 쓸 경우 - '0' 또는 -48 을 해주어야 한다. 아스키코드에 대응하는 문자가 나올 수 있기 때문이다.


풀이 2.

BufferedReader로 사용자에게 숫자를 받아
Integer.parseInt(br.readLine()) 를 이용해 형변환해 계산한 다음
String.valueOf(result) 사용해 다시 String형으로 바꿔 세어준다

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new
        				InputStreamReader(System.in));
		int[] arr = new int[10];

		int result = Integer.parseInt(br.readLine())
        			* Integer.parseInt(br.readLine())
				* Integer.parseInt(br.readLine());

		String str = String.valueOf(result);

		for (int i = 0; i < str.length(); i++) {
			arr[(str.charAt(i) - '0')]++;
		}

		// 향상된 for 문
		// arr 배열에서 하나씩 뽑아 v에 넣는다
		for (int v : arr) {
			System.out.println(v);
		}
	}
}

아래가 Scanner 를 사용했을 때, 위가 BufferedReader 를 사용했을 때이다. 시간적으로 BufferedReader 가 더 빠르다는 것을 확인할 수 있었다.

0개의 댓글