https://www.acmicpc.net/problem/10610
그리디 알고리즘의 30 문제 입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _10610
{
class Program
{
static void Main(string[] args)
{
string input = Console.ReadLine();
int zeroCount = 0;
int digitSum = 0;
//각 숫자를 하나씩 저장할 리스트.
var intList = new List<int>();
{
int digitNum = int.Parse(input.Substring(i, 1));
//각 자릿수 합.
digitSum += digitNum;
if (digitNum == 0)
zeroCount++;
}
//자릿수 합의 나머지가 0이 아니거나 0이 없으면 30의 배수 불가.
//숫자가 모두 0으로 채워진 경우 또한 불가능.
Console.WriteLine("{0}", -1);
//이는 만들어질 수 있으므로 Sort후 뒤집어서 출력.
else
{
intList.Reverse();
foreach (int num in intList)
Console.Write(num);
}
}
}
}
|
string 형식의 긴 숫자를 받아 이를 이용해 가장 큰 30의 배수로 만드는 문제 입니다.
30의 배수는 3 * 10 이기 때문에 10의 배수가 되어야 하고 3의 배수가 돼야 합니다.
10의 배수는 일의 자리에 0이 반드시 필요하며 3의 배수는 수의 모든 자릿수 합이 3의 배수가
되어야 합니다.
인풋을 string으로 받아 각 자리를 int로 변환, list에 넣어주었습니다 이 과정에서 확인하는 것이 있습니다.
1 : 0의 갯수를 세어주겠습니다. 0의 갯수가 한개도 없거나 모두 0이면 30의 배수가 될 수 없습니다.
2 : 각 자릿수를 계속해서 더해 digitSum에 저장하겠습니다. 이 값을 3으로 나눈 나머지가 0이 아니면 3의 배수가 아닙니다.
이 둘을 통과했다면 30의 배수로 만들수 있는 값이며 list에 있는 한자리씩의 정수를 Sort, Reverse하여 큰것부터 차례대로 오도록 하고 이를 순서대로 출력 했습니다.
백준#1541 - 잃어버린 괄호 (0) | 2020.04.11 |
---|---|
백준#2875 - 대회 or 인턴 (0) | 2020.04.11 |
백준#2217 - 로프 (0) | 2020.04.09 |
백준#2884 - 알람시계 (0) | 2020.04.09 |
백준#14681 - 사분면 고르기 (0) | 2020.04.09 |