1 분 소요

문제 링크 : https://level.goorm.io/exam/43061/%EA%B3%84%EC%88%98%EA%B8%B0-%EB%A7%8C%EB%93%A4%EA%B8%B0/quiz/1

문제 제목 : 계수기 만들기

계수기 만들기제출완료 100점 참여자 207 정답률 64.2% 7 17 문제

각 자리마다 최댓값이 다른 숫자판을 가진 계수기를 만들고자 한다. 이 계수기가 만족해야 하는 요건은 다음과 같다.

계수기는 개의 자릿수를 표시할 수 있다. 번째 자리에는 부터 까지의 숫자를 표시할 수 있다. 버튼을 한 번 누르면 가장 오른쪽 자리의 숫자가 증가한다. 만약 어떤 자리의 숫자가 표시할 수 있는 최댓값보다 커진다면, 숫자를 최솟값 으로 초기화하고 바로 왼쪽 자리의 숫자를 증가시킨다. 가장 왼쪽 자리의 숫자가 최댓값을 넘어갈 때는 왼쪽으로 올림을 전파하지 않는다. 계수기에 표시되는 숫자의 초기 상태가 주어질 때, 번 버튼을 누른 뒤 계수기의 각 자리에 표시되는 숫자를 구해보자.

예제 설명

첫 번째 예제에서 계수기에 표시되는 숫자는 다음과 같이 변한다.

64 → 65 → 66 → 67 → 68 → 70 → 71 → 72

입력 첫째 줄에 계수기의 숫자판의 개수 이 주어진다. 둘째 줄에 각 숫자판의 최댓값을 의미하는 이 공백을 두고 주어진다. 셋째 줄에 각 숫자판의 초기값을 의미하는 이 공백을 두고 주어진다. 넷째 줄에 버튼을 누르는 횟수 가 주어진다.

입력으로 주어지는 모든 수는 정수이다.

출력

번 버튼을 누른 뒤, 계수기에 표시되는 개의 숫자를 공백없이 출력한다.

입/출력 예시 : 공백 : 줄바꿈 : 탭 예시 1 입력 2 78 64 7 출력 72 예시 2 입력 5 86977 14523 361 출력 15074 예시 3 입력 7 4315246 4304200 28174 출력 0112246 ⋇ 입출력 형식을 잘 지켜주세요

문제 풀이

import java.io.*;
import java.util.*;
class Main {
  public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int N = Integer.parseInt(br.readLine());
    int[] ArrE = new int[N];
    String line = br.readLine();
    StringTokenizer st = new StringTokenizer(line);
    for (int i = 0; i < N; i++) {
        ArrE[i] = Integer.parseInt(st.nextToken());
    }

    int[] ArrS = new int[N];
    String line2 = br.readLine();
    st = new StringTokenizer(line2);
    for (int i = 0; i < N; i++) {
        ArrS[i] = Integer.parseInt(st.nextToken());
    }
    
    int K = Integer.parseInt(br.readLine());

    for(int i = 0; i < K; i++){
      ArrS[ArrS.length - 1]++;
      for(int j = ArrS.length - 1; j >= 0; j--){
        if(ArrS[j] > ArrE[j]){
          ArrS[j] = 0;
          if(j > 0){
            ArrS[j - 1]++;          
          }
        }
      }
    }
    for(int i = 0; i < ArrS.length; i++){
      System.out.print(ArrS[i]);
    }
  }
}

댓글남기기