elesis's haunt

2577 숫자의 개수 본문

백준~문풀 후 최적화 추가~/단계별로 풀어보기

2577 숫자의 개수

elesis 2021. 9. 23. 16:27

*BufferedReader, 이중for(+향상for), 배열 - O(N^2)

import java.io.*;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int a = Integer.parseInt(br.readLine());
		int b = Integer.parseInt(br.readLine());
		int c = Integer.parseInt(br.readLine());
		int n0 = 0; int n1 = 0; int n2 = 0; int n3 = 0;
		int n4 = 0; int n5 = 0; int n6 = 0; int n7 = 0;
		int n8 = 0; int n9= 0;
		br.close();
		
		int mul = a*b*c;
		String[] strArr = String.valueOf(mul).split("");
		int[] intArr = {n0, n1, n2, n3, n4, n5, n6, n7, n8, n9}; 
		
		for(String strNum : strArr) {
			for(int i=0; i<10; i++) {
				if( Integer.parseInt(strNum) == i) {
					intArr[i]++;
				}
			}
		}
		
		for(int i=0; i<10; i++) {
			System.out.println(intArr[i]);
		}
	}
}

 

* Scanner, 이중for, 나은 로직 - O(N^2)

import java.util.Scanner;
 
public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
 
		int value = (in.nextInt() * in.nextInt() * in.nextInt());
		String str = Integer.toString(value);
		in.close();
		
		for (int i = 0; i < 10; i++) {
			int count = 0;
			for (int j = 0; j < str.length(); j++) {
				if ((str.charAt(j) - '0') == i) {
					count++;
				}
			}
			System.out.println(count);
		}
	}
}

 

* BufferedReader, 향상for, 나은 로직 - O(N)

import java.io.*;
 
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 val = Integer.parseInt(br.readLine()) * Integer.parseInt(br.readLine()) * Integer.parseInt(br.readLine());
		String str = String.valueOf(val);
 
		for (int i = 0; i < str.length(); i++) {
			arr[(str.charAt(i) - 48)]++;
		}
 
		for (int v : arr) {
			System.out.println(v);
		}
	}
}

 

* BufferedReader, While, 배열

import java.io.*;
 
public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
		int val = Integer.parseInt(br.readLine())*Integer.parseInt(br.readLine())*Integer.parseInt(br.readLine());
		int[] arr = new int[10];
		
		while(val!=0) {
			arr[val%10]++;
			val/=10;
		}
		
		for(int result : arr) {
			System.out.println(result);
		}
	}
}

이중 for문은 시간복잡도가 O(N^2)로 좋은 코드가 아니다.

마지막 코드는 String.charAt과 굳이 형변환을 안해도 되는 점이 좋은 코드이다.

(스캐너 외의 두 코드는 속도차이 미미한 편)

 

'백준~문풀 후 최적화 추가~ > 단계별로 풀어보기' 카테고리의 다른 글

1546 평균  (0) 2021.09.24
3052 나머지  (0) 2021.09.24
2562 최댓값  (0) 2021.09.23
10818 최소, 최대  (0) 2021.09.16
1110 더하기 사이클  (0) 2021.09.16
Comments