문제) 백준 - 그리디 알고리즘 - 밑 줄
https://www.acmicpc.net/problem/1474
1474번: 밑 줄
세준이는 N개의 영어 단어를 이용해 길이가 M인 새로운 단어를 만들려고 한다. 새로운 단어는 N개의 단어를 순서대로 이어 붙이고, 각 단어의 사이에 _을 넣어서 만든다. 이렇게 만든 새로운 단어
www.acmicpc.net
사전 순으로 가장 빠른 것을 출력하기 위해 알파벳과 밑 줄의 우선순위를 이해해야 합니다. 밑 줄의 순서가 'A' < 'B' < 'C' < ... < 'Z' < '_' < 'a' < 'b' < 'c' < ... < 'z' 이므로 소문자보다는 밑 줄이 먼저 와야 합니다. 따라서 단어 사이에 균등하게 넣을 밑 줄을 계산하고, 남은 빈칸(redBlank)이 0 이상일 경우 모든 단어를 탐색하면서 소문자일 때 빈칸을 추가합니다. 모든 단어 탐색 후에도 넣어줘야 할 빈칸이 있을 경우, 뒤에서부터 대문자로 시작하는 단어에 빈칸을 추가합니다.
C++ 소스코드)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
int bas = (M - totalSize) / (N - 1); | |
int redBlank = (M - totalSize) % (N - 1); | |
for (int i = 1; i < N; ++i) { | |
if (redBlank > 0 && ('a' <= bb[i][0] && bb[i][0] <= 'z')) { | |
bb[i] = '_' + bb[i]; | |
redBlank--; | |
} | |
} | |
for (int i = N - 1; i > 0; --i) { | |
if (redBlank > 0 && 'A' <= bb[i][0] && bb[i][0] <= 'Z') { | |
bb[i] = '_' + bb[i]; | |
redBlank--; | |
} | |
} | |
for (int i = 1; i < N; ++i) | |
for (int j = 0; j < bas; ++j) | |
bb[i] = '_' + bb[i]; |
Full Code)
GitHub - Chocochip101/BOJ_Solution: BOJ Solutions
BOJ Solutions. Contribute to Chocochip101/BOJ_Solution development by creating an account on GitHub.
github.com
반응형
'PS(Problem Solving) > 백준_BOJ' 카테고리의 다른 글
[백준] 11256번 - 사탕 (C++) 문제 및 풀이 (0) | 2022.01.26 |
---|---|
[백준] 17829번 - 222-풀링 (C++) 문제 및 풀이 (0) | 2022.01.25 |
[백준] 10808번 - 알파벳 개수 (C++) 문제 및 풀이 (0) | 2022.01.25 |
[백준] 5427번 - 불 (C++) 문제 및 풀이 (0) | 2022.01.24 |
[백준] 4358번 - 생태학 (C++) 문제 및 풀이 (0) | 2022.01.23 |
댓글