fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 16130 (C++) 벌점 (DemeritPoints)
최초 업로드: 2025-10-27 23:42:52
최근 수정 시간: 2025-10-27 23:42:52
게시자: rlatjwls3333
카테고리: 백준
조회수: 9
# [Bronze I] 벌점 (DemeritPoints) [문제 링크](https://www.acmicpc.net/problem/16130) ## 문제 설명 <p>설곽인들은 벌점, 주로 의행관 벌점을 받으며 살아가고 때때로 기숙사 생활의 꽃인 퇴사를 하기도 한다. 벌점을 받을 때마다 벌점 감량 프로그램을 할 수도 있지만, 4층 선배님의 방에서 재침을 하고 조회는 물론 1교시 물리 수업을 무단 결과하는 등 벌점을 한 번에 많이 받는 행동을 하면 벌점이 10점을 넘어 퇴사를 당한다. 비록 그자가 수석이라 할지라도!</p> <p>설곽인들은 잘 알고 있겠지만 설곽의 벌점과 퇴사 규칙은 다음과 같다.</p> <ol> <li>벌점 X점을 받으면 누적 벌점에 X점이 추가된다.</li> <li>X점이 추가되어서 누적 벌점을 10으로 나눈 몫이 증가한 경우 퇴사를 당한다. 이 몫이 1, 2, 3인 경우 1, 2, 3주 퇴사, 4인 경우 <strong>무기 퇴사</strong>, 4보다 큰 경우 <strong>영구 퇴사</strong>를 당한다.</li> <li>무기 퇴사나 영구 퇴사를 당하면 의행관에 다시 들어올 수 없고 벌점도 더 받을 수 없다.</li> </ol> <p>이제 입력된 데이터로 벌점의 주인이 총 몇 주 동안 퇴사를 당하는지 주 단위로 계산해 보자. 단, 퇴사 기간 동안에는 벌점을 받지 않고, 퇴사가 끝난 이후 다시 벌점을 받기 시작한다고 가정한다.</p> <p>참고로 <code>0</code>~<code>9</code>의 아스키 코드는 <code>48</code>~<code>57</code>이고, <code>A</code>~<code>Z</code>의 아스키 코드값은 <code>65</code>~<code>90</code>이다.</p> ## 입력 <p>첫 줄에 퇴사 기간을 계산해야 하는 학생의 수 <em>N</em> (<em>N</em> ≤ 20) 이 주어진다.</p> <p>두 번째 줄부터 N개의 줄에 걸쳐 각 학생의 정보가 주어진다. 한 줄에 한 학생이 순서대로 받은 벌점이 공백 없는 문자열로 주어진다. 0점부터 9점까지의 벌점은 숫자 <code>0</code> ~ <code>9</code>로, 10점부터 35점까지의 벌점은 <code>A</code> ~ <code>Z</code>의 알파벳 대문자로 주어진다. 이 문자열의 길이는 30을 넘지 않는다.</p> <p>가령, 입력으로 <code>B1A4</code>가 주어진다면 11점, 1점, 10점, 4점의 순서로 벌점을 받은 것이다.</p> ## 출력 <p>각각의 학생들이 퇴사해 있는 총 기간을 주 단위로 한 줄에 한 명씩 출력하자.</p> <p>무기 퇴사나 영구 퇴사를 당한 경우 퇴사 기간을 출력하고, 그 뒤에 무기 퇴사의 경우 (weapon)을, 영구 퇴사의 경우 (09)를 공백 없이, 괄호를 포함하여 추가로 출력하고 이는 퇴사 기간에 포함하지 않는다.</p> ## 풀이 총 퇴출 기간과, 무기 퇴출인지 영구 퇴출인지 여부만 확인하면 됩니다. ``` c++ #include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; while(n--) { string s; cin >> s; int res=0, sum=0; for(char ch:s) { int cur; if(ch<='9') cur=ch-'0'; else cur=ch-'A'+10; if(sum/10!=(sum+cur)/10 && (sum+cur)/10<=3) res += (sum+cur)/10; sum += cur; } cout << res; if(sum/10==4) cout << "(weapon)"; else if(sum/10>4) cout << "(09)"; cout << '\n'; } } ```