fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 31797 (C++) 아~파트 아파트
최초 업로드: 2025-11-20 16:47:17
최근 수정 시간: 2025-11-20 16:47:17
게시자: rlatjwls3333
카테고리: 백준
조회수: 6
# [Silver IV] 아~파트 아파트 [문제 링크](https://www.acmicpc.net/problem/31797) ## 문제 설명 <p>부산대학교 정보컴퓨터공학부는 매년 봄 MT를 떠난다. 봄 MT에 간 산지니는 아파트라는 술게임을 배웠다.</p> <ol> <li>게임을 시작한 사람이 아파트의 층수 $N$을 정한다.</li> <li>게임의 모든 참가자는 자신의 두 손을 다른 사람과 겹치지 않는 높이로 뻗어 모든 참가자의 두 손이 서로 쌓이도록 한다.</li> <li>가장 아래에 있는 손을 빼 쌓여있는 손 가장 위에 쌓는다.</li> <li><strong>3.</strong>의 과정을 $N$번 반복한다. $j$번째로 쌓은 손이 $j$층이 된다.</li> <li>$N$층을 쌓는 참가자가 술을 마시고 게임이 종료된다.</li> </ol> <p>새내기인 산지니는 누가 술을 마시게 될 지 궁금해졌다. 산지니를 위해 누가 술을 마시게 될 지 구해주자.</p> ## 입력 <p>첫 번째 줄에 아파트의 층수 $N$, 참가자의 수 $M$이 공백으로 구분되어 주어진다. $(1 \leq N, M \leq 1\,000)$</p> <p>두 번째 줄부터 $M+1$번째 줄까지 $i$번 참가자의 두 손의 높이 $H_{1,i}$, $H_{2,i}$가 공백으로 구분되어 주어진다. $(1 \leq H_{1,i}, H_{2, i} \leq 10\,000)$ </p> <p>어떤 두 손도 같은 높이인 경우는 주어지지 않는다. 모든 입력은 정수이다.</p> ## 출력 <p>술을 마시게 될 사람의 번호를 출력한다.</p> ## 풀이 손을 높이 순으로 정렬한 후 (n-1)%(2m) 인덱스에 위치한 손을 가진 사람의 번호를 출력하면 됩니다. ``` c++ #include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n, m; cin >> n >> m; vector<pair<int, int>> v; for(int i=1;i<=m;i++) { int h1, h2; cin >> h1 >> h2; v.push_back({h1, i}); v.push_back({h2, i}); } sort(v.begin(), v.end()); cout << v[(n-1)%v.size()].second; } ```