fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 31784 (C++) 포닉스의 문단속
최초 업로드: 2025-09-29 18:37:41
최근 수정 시간: 2025-09-29 18:38:31
게시자: rlatjwls3333
카테고리: 백준
조회수: 5
# [Silver I] 포닉스의 문단속 [문제 링크](https://www.acmicpc.net/problem/31784) ## 문제 설명 <p>포닉스의 집은 어디일까? 사람들은 포닉스의 집이 포스텍일 것이라 생각하지만, 사실 포닉스는 하늘 높이 있는 불사조 마을에 살고 있다. 불사조 마을은 외부인의 접근이 어려울뿐더러 불사조들은 태생이 정의로운 생물이기 때문에 불사조들은 문단속을 잘 까먹곤 한다.</p> <p>포닉스 역시 예외는 아니라서 매일 문을 잠그지 않은 채로 포스텍과 불사조 마을을 왕복하고 있었다. 그러던 어느 날, 포닉스가 집을 비운 사이 포스텍의 유명한 대도 <em>Mr. K</em>가 포닉스의 집에 자물쇠를 설치하고 말았다! 자물쇠는 $N$개의 다이얼이 연결된 형태이며, 각 다이얼에는 A부터 Z까지의 알파벳 대문자가 차례대로 적혀 있다.</p> <p>포닉스는 자물쇠를 풀기 위해 다이얼 중 하나를 골라 $1$번 돌리는 작업을 할 수 있다. 이때 고른 다이얼에 표시된 문자가 A였다면 B로, B였다면 C로, ..., Z였다면 A로 변한다. 반대 방향으로는 돌릴 수 없다. 정보를 모은 결과, 포닉스는 이러한 작업을 정확히 $K$번 해 표시할 수 있는 문자열 중 사전 순으로 가장 작은 것이 자물쇠의 비밀번호라는 사실을 알아내었다. 포닉스가 다시 집을 되찾을 수 있도록 자물쇠의 비밀번호를 알아내 보자.</p> ## 입력 <p>첫 번째 줄에 자물쇠의 길이 $N$과 작업의 횟수 $K$가 공백으로 구분되어 주어진다. $(1\le N\le 200\ 000; 0\le K\le 1\ 000\ 000)$</p> <p>두 번째 줄에 현재 자물쇠에 표시된 길이가 $N$인 문자열 $S$가 주어진다. $S$는 알파벳 대문자로만 이루어져 있음이 보장된다.</p> ## 출력 <p>다이얼을 정확히 $K$번 돌려 만들 수 있는 사전 순으로 가장 작은 문자열을 출력한다.</p> ## 풀이 앞에서부터 그리디하게 'A'를 만들 수 있으면 최대한 만들어주면 된다. ``` c++ #include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n, k; string s; cin >> n >> k >> s; for(int i=0;i<n;i++) { if(i==n-1) { cout << (char)((s[i]-'A'+k)%26+'A'); } else if(s[i]!='A' && k>=26-(s[i]-'A')) { cout << 'A'; k -= 26-(s[i]-'A'); } else { cout << s[i]; } } } ```