자바로 백준 1474 풀기

hong030·2023년 7월 28일
0
  • 실버 1단계 문제

풀이)

공통적으로 가져야 할 밑줄 개수, 추가적으로 더 붙어야 할 소문자 앞의 개수를 구한다.
그리디 알고리즘을 통해 사전순으로 앞서는 단어를 먼저 출력해야 한다.
'Z' > 'a'

첫 글자가 대문자일 경우 / 소문자일 경우로 나누어 풀자.

내 코드)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		ArrayList<String> arr = new ArrayList<>();
		int count = 0;
		for (int i = 0; i < n; i++) {
			arr.add(br.readLine());
			count += arr.get(i).length();
		}
		int blank = m - count;
		if (blank > 0) {
			int c = blank / (n - 1);
			int k = blank % (n - 1);
			String add1 = "";
			while (c > 0) {
				add1 += '_';
				c--;
			}
			for (int j = 0; j < n - 1; j++) {
				if (k > 0) {
					if (arr.get(j + 1).charAt(0) <= 'z' && arr.get(j + 1).charAt(0) >= 'a') {
						arr.set(j, arr.get(j) + '_');
						k--;
					} else if (j >= n - 1 - k) {
						arr.set(j, arr.get(j) + '_');
						k--;
					}
				}
				arr.set(j, arr.get(j) + add1);
			}
		}
		StringBuilder sb = new StringBuilder();
		for (String str : arr) {
			sb.append(str);
		}
		System.out.println(sb);
	}

}
profile
자바 주력, 프론트 공부 중인 초보 개발자. / https://github.com/hongjaewonP

1개의 댓글

comment-user-thumbnail
2023년 7월 28일

좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기