본문 바로가기
알고리즘 문제/Java

[goormlevel/Java] 계수기 만들기

by 현장 2026. 6. 8.

-Code

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[] limit = readNums(br.readLine(), n);
		int[] num = readNums(br.readLine(), n);
		// 누르는 횟수 받기
		int k = Integer.parseInt(br.readLine());
		br.close();
		// 누르는 횟수만큼 증가
		num[n - 1] += k;
		// 맨 오른쪽 부터 검사
		for (int idx = n - 1; idx >= 0; idx--) {
			// 해당 자리수가 제한을 넘지 않으면 탈출
			if (num[idx] <= limit[idx]) break;
			// 넘으면 0으로 바꾸고 마지막 수가 아니면 다음 자릿수 증가
			// 다음 자릿수가 존재하는지 확인
			if (idx - 1 >= 0) {
				int up = num[idx] / (limit[idx] + 1);
				num[idx - 1] += up;
			}
			num[idx] = num[idx] % (limit[idx] + 1);
		}
		// 배열의 숫자를 합침
		StringBuilder sb = new StringBuilder();
		for (int el : num) sb.append(el);
		System.out.println(sb);
	}
	// 중복되는 입력을 제거하기 위한 메소드
	private static int[] readNums (String line, int len) {
		int[] answer = new int[len];
		StringTokenizer st = new StringTokenizer(line);
		for (int i = 0; i < len; i++) {
			answer[i] = Integer.parseInt(st.nextToken());
		}
		return answer;
	}
}

처음에 문제를 이상하게 이해해서 잘못짰습니다. 다시 이해한 후 맨 오른쪽 수를 클릭만큼 증가하고 오른쪽 부터 왼쪽으로 검사하며 숫자를 증가시키는 방식으로 해결했습니다.