๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

[๋ฐฑ์ค€] 10610๋ฒˆ: 30(๊ทธ๋ฆฌ๋””)

by ์ฃผ๋ฐœ2 2020. 1. 23.
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/10610

 

10610๋ฒˆ: 30

๋ฌธ์ œ ์–ด๋Š ๋‚ , ๋ฏธ๋ฅด์ฝ”๋Š” ์šฐ์—ฐํžˆ ๊ธธ๊ฑฐ๋ฆฌ์—์„œ ์–‘์ˆ˜ N์„ ๋ณด์•˜๋‹ค. ๋ฏธ๋ฅด์ฝ”๋Š” 30์ด๋ž€ ์ˆ˜๋ฅผ ์กด๊ฒฝํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ๋Š” ๊ธธ๊ฑฐ๋ฆฌ์—์„œ ์ฐพ์€ ์ˆ˜์— ํฌํ•จ๋œ ์ˆซ์ž๋“ค์„ ์„ž์–ด 30์˜ ๋ฐฐ์ˆ˜๊ฐ€ ๋˜๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์–ดํ•œ๋‹ค. ๋ฏธ๋ฅด์ฝ”๋ฅผ ๋„์™€ ๊ทธ๊ฐ€ ๋งŒ๋“ค๊ณ  ์‹ถ์–ดํ•˜๋Š” ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ. ์ž…๋ ฅ N์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. N๋Š” ์ตœ๋Œ€ 105๊ฐœ์˜ ์ˆซ์ž๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, 0์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ถœ๋ ฅ ๋ฏธ๋ฅด์ฝ”๊ฐ€ ๋งŒ๋“ค๊ณ  ์‹ถ์–ดํ•˜๋Š” ์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ๊ทธ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋ผ. ๊ทธ ์ˆ˜๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”

www.acmicpc.net

 

์ฝ”๋“œ

import java.util.Scanner;

public class Main {
	public static String str;
	public static int[] numCountArr;

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		str = scan.next();			// ์ž…๋ ฅ๋ฐ›์€ N
		numCountArr = new int[10];	// ์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์—ด์˜ ๊ฐ ์ž๋ฆฟ์ˆ˜๋ฅผ ์ €์žฅ
		long total = 0;
		for(int i=0; i<str.length(); i++) {
			// ๋ฌธ์ž์—ด์˜ ๊ฐ ์ž๋ฆฟ์ˆ˜ ์ €์žฅ
			int strNum = Integer.parseInt(str.substring(i, i+1));
			numCountArr[strNum] ++;
			total += strNum;
		}

		// ์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์— 0์ด ์—†๊ฑฐ๋‚˜, ๊ฐ ์ž๋ฆฟ์ˆ˜์˜ ํ•ฉ์ด 3์˜๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฉด 30์˜๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹˜.
		if(!str.contains("0") || total%3 != 0) {
			System.out.println("-1");
			return;
		}
		
		StringBuilder sb = new StringBuilder();
		for(int i=9; i>=0; i--) {	// ํฐ์ˆ˜๋ถ€ํ„ฐ ์ €์žฅ
			while(numCountArr[i] > 0) {
				sb.append(i);
				numCountArr[i] --;
			}
		}
		System.out.println(sb.toString());
		
		scan.close();
	}

}

 

ํ’€์ด

์–ด๋ ต๋‹ค... ๋‹ค๋ฅธ ๊ธ€๋“ค์„ ์ฐธ๊ณ ํ•ด์„œ ํ’€์—ˆ๋‹ค.

30์˜ ๋ฐฐ์ˆ˜๊ฐ€ ๋˜๋Š” ์กฐ๊ฑด์„ ์ฐพ์•„์•ผํ•œ๋‹ค !!

 

30์˜ ๋ฐฐ์ˆ˜๋Š” 30, 60, 90, 120, 150, 180, 210, 240, 3000, 3030, 3060, ...

- ๋์— ๋ฌด์กฐ๊ฑด 0์œผ๋กœ ๋๋‚˜์•ผํ•œ๋‹ค.

- ๋˜ํ•œ ๊ฐ ์ž๋ฆฟ์ˆ˜์˜ ํ•ฉ์ด 3์˜ ๋ฐฐ์ˆ˜์ด๋‹ค.

 

๋˜ํ•œ ์ฃผ์˜ํ• ์ ์€ N์ด 10^5๊ฐœ์˜ ์ˆซ์ž๋กœ ๋˜์–ด์žˆ๋‹ค -> 100000 ๊นŒ์ง€๊ฐ€ ์•„๋‹Œ 100000 ์ž๋ฆฟ์ˆ˜์ด๋‹ค.

๋”ฐ๋ผ์„œ int๋‚˜ long๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๊ณ  ๋ฌธ์ž์—ด๋กœ ์ž…๋ ฅ๋ฐ›์•„์•ผ ํ•œ๋‹ค.

 

๋จผ์ € for๋ฌธ์„ ํ†ตํ•ด ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์˜ ๊ฐ ์ž๋ฆฟ์ˆ˜๋ฅผ ์ธ๋ฑ์Šค๋กœ ๊ฐ€์ง€๋Š” ๋ฐฐ์—ด์— ์ €์žฅํ•˜๊ณ ,(numCountArr[])

๊ฐ ์ž๋ฆฟ์ˆ˜์˜ ํ•ฉ์„ ๋”ํ•ด์ค€๋‹ค.(total)

		for(int i=0; i<str.length(); i++) {
			// ๋ฌธ์ž์—ด์˜ ๊ฐ ์ž๋ฆฟ์ˆ˜ ์ €์žฅ
			int strNum = Integer.parseInt(str.substring(i, i+1));
			numCountArr[strNum] ++;
			total += strNum;
		}

 

 

์œ„ for๋ฌธ์ด ๋๋‚˜๋ฉด ์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์— 0์ด ์—†๊ฑฐ๋‚˜, 3์˜ ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹Œ์ง€ ํŒ๋‹จํ•œ๋‹ค.

-> 0์ด ์—†๊ฑฐ๋‚˜ 3์˜ ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฉด 30์˜ ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ -1์„ ์ถœ๋ ฅํ•˜๊ณ  ์ข…๋ฃŒํ•œ๋‹ค.

		// ์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์— 0์ด ์—†๊ฑฐ๋‚˜, ๊ฐ ์ž๋ฆฟ์ˆ˜์˜ ํ•ฉ์ด 3์˜๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฉด 30์˜๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹˜.
		if(!str.contains("0") || total%3 != 0) {
			System.out.println("-1");
			return;
		}

 

 

๋งŒ์•ฝ ์œ„ ์กฐ๊ฑด์„ํ†ตํ•ด 0์ด ์žˆ๊ณ  3์˜๋ฐฐ์ˆ˜์ผ๊ฒฝ์šฐ => ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์€ 30์˜ ๋ฐฐ์ˆ˜์ด๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

		StringBuilder sb = new StringBuilder();
		for(int i=9; i>=0; i--) {	// ํฐ์ˆ˜๋ถ€ํ„ฐ ์ €์žฅ
			while(numCountArr[i] > 0) {
				sb.append(i);
				numCountArr[i] --;
			}
		}
		System.out.println(sb.toString());

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€