[백준] - 단계별로 풀어보기(1차원 배열) 2577

13876 단어 Java백준Java

백준 2577번

숫자의 개수

문제 출처 https://www.acmicpc.net/problem/2577


내가 작성한 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;

public class Main {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int a = Integer.parseInt(br.readLine());
		int b = Integer.parseInt(br.readLine());
		int c = Integer.parseInt(br.readLine());
		int sum=a*b*c;  //3개수의 곱
		String s = Integer.toString(sum);
		int x = s.length(); //곱한 값의 자릿수
		int y = (int)Math.pow(10,x-1);  //10의 제곱근 구하기
		int str[] =new int[x]; //자릿수 만큼 배열 크기 선언
        str[0] = sum/y; //sum의 맨 첫번째 값을 배열 첫번째에 넣어주기
        int sum2 = sum%y;  //첫번째 자릿수를 구하고 나머지 값을 sum2로 고정
		int z = y/10;  // 두번째 자리 수를 구하기 위해 미리 10의 제곱은 한단계 낮춘다.
		int str2[] =new int[10]; //0~9까지 값을 넣어주기 위한 배열 선언
		
        
		for(int i=1; i<x; i++) { //str 배열에 두번째 자릿값부터 구해서 넣어주기
			str[i] = (sum2)/(z);
			sum2 = sum2%z;
			z = z/10;
		}
		
		for(int j=0; j<10; j++) { //str2배열에 값을 모두 0으로 채우기
			str2[j] =0;
		}
        
		for(int i=0; i<x; i++) {   //str 배열 전체 돌기
			for(int j=0; j<10; j++) { //str2배열 전체 돌기
				if(j==str[i]) { //0부터 9까지 일치하는 값이 있다면
					str2[j] +=1; //+1씩 증가해준다.
				}
			}
		}
        
		for(int v : str2) { //최종 str2 배열 출력
			System.out.println(v);
		}
	}
}

접근 방법

일단 내가봐도 너무 복잡하게 접근해서 해결했다...다른 블로그를 보니 훨씬 간단하게 풀 수있는 문제였다. 그래도 설명을 해보자면,,,

  1. 우선 3개의 수를 받아서 sum에 3개의 곱을 넣는다.
  2. sum이 몇자리수 인지 파악하기 위해 String으로 변경하고 그 자릿수를 x에 넣는다.
  3. y는 sum의 (자릿수-1)만큼 10의 제곱근을 만들어준다.
    ex) 3567 -> 4자리수 | 3567 / 10^3 으로 나누어야 하기 때문에 10^(x-1)
  4. str[0] 배열에 sum의 맨 앞자리 숫자를 넣어준다.
    ex) 3567 / 10^3 -> 3
  5. 첫번째 자릿수를 구하고 나머지 값을 sum2로 고정
    ex) 3567 % 10^3 -> 567 = sum2
  6. sum2의 자릿수가 (4->3) 3자리로 줄었기 떄문에 10^3을 10으로 나누어서 10^2로 만들어주고 시작한다.
  7. 첫번째 for문을 통해 str배열에 하나씩 넣어준다.
  8. 두번째 for문은 str2배열의 값들을 0으로 우선 채워준다.
    9.이중 for문을 이용하여 해당 숫자가 존재하다면 +1을 해준다.

좋은 웹페이지 즐겨찾기