알고리즘/백준

[백준 - 17828] 골드5 - 문자열 화폐 (그리디)

www.acmicpc.net/problem/17828

 

17828번: 문자열 화폐

첫 번째 줄에 문자열의 길이 N(1 ≤ N ≤ 5,000,000)과, 문자열의 가치를 나타내는 정수 X(1 ≤ X ≤ 500,000,000)가 공백으로 구분되어 주어진다.

www.acmicpc.net

1. 유형

그리디

 

2. 풀이

배열을 전부다 A로 초기화 한다

 

끝부터 탐색하며 25보다 값이 크면 빼주면서 초기화

 

java로 풀 경우 시간이 타이트 해서, StringBuilder를 사용해서 출력 시간을 줄여야 한다.

 

3. 코드

package 그리디;

import java.util.Scanner;

public class back_17828문자열화폐 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int len = sc.nextInt();
		int x = sc.nextInt();
		StringBuilder sb = new StringBuilder();
		boolean flag = true;
		if(x < len) {
			flag =false;
		}
		if (x / 26 > len) {
			flag = false;
		}
		if (x / 26 == len && x % 26 != 0) {
			flag = false;
		}
		if (flag) {
			char map[] = new char[len];
			x-=len;
			for (int i = len - 1; i >= 0; i--) {
				map[i] = 'A';
				if (x >= 25) {
					x -= 25;
					map[i] +=25;
				} else if(x>0 && x<25){
					map[i]+=x; 
					x=0;
				}
				sb.append(map[i]);
			}
			sb.reverse();
			System.out.println(sb);
		}else {
			System.out.println('!');
		}
	}
}