[Silver IV] 아~파트 아파트 - 31797

문제 링크

성능 요약

메모리: 1112 KB, 시간: 0 ms

분류

구현, 정렬

제출 일자

2026년 04월 25일 22:04:59

문제 설명

부산대학교 정보컴퓨터공학부는 매년 봄 MT를 떠난다. 봄 MT에 간 산지니는 아파트라는 술게임을 배웠다.

  1. 게임을 시작한 사람이 아파트의 층수 $N$을 정한다.
  2. 게임의 모든 참가자는 자신의 두 손을 다른 사람과 겹치지 않는 높이로 뻗어 모든 참가자의 두 손이 서로 쌓이도록 한다.
  3. 가장 아래에 있는 손을 빼 쌓여있는 손 가장 위에 쌓는다.
  4. 3.의 과정을 $N$번 반복한다. $j$번째로 쌓은 손이 $j$층이 된다.
  5. $N$층을 쌓는 참가자가 술을 마시고 게임이 종료된다.

새내기인 산지니는 누가 술을 마시게 될 지 궁금해졌다. 산지니를 위해 누가 술을 마시게 될 지 구해주자.

입력

첫 번째 줄에 아파트의 층수 $N$, 참가자의 수 $M$이 공백으로 구분되어 주어진다. $(1 \leq N, M \leq 1\,000)$

두 번째 줄부터 $M+1$번째 줄까지 $i$번 참가자의 두 손의 높이 $H_{1,i}$, $H_{2,i}$가 공백으로 구분되어 주어진다. $(1 \leq H_{1,i}, H_{2, i} \leq 10\,000)$

어떤 두 손도 같은 높이인 경우는 주어지지 않는다. 모든 입력은 정수이다.

출력

술을 마시게 될 사람의 번호를 출력한다.


💡 해결 방법

💻 코드

//https://www.acmicpc.net/problem/31797
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
typedef struct hands{
    int hand;
    int who;
}hands;
//21:17~ 22:00
//22:10 ~ 
 
void sort(hands arr[], int len)
{
  
    for(int cur = 0; cur < len ; cur++)
    {
        int min = cur;
        for(int i = cur; i < len; i++)
        {   
            min = arr[i].hand > arr[min].hand ? min : i;
        }
        
        hands temp; temp.hand = arr[min].hand; temp.who = arr[min].who;
        arr[min].hand = arr[cur].hand; arr[min].who = arr[cur].who;
        arr[cur].hand = temp.hand; arr[cur].who = temp.who; 
    }//hand 기준으로 hands를 정렬한다
 
 
 
   for(int cur = 0; cur < len ; cur++)
   {
       // printf("[%d: %d]", arr[cur].hand, arr[cur].who);
   }
 
 
 
 
}
 
 
void search(hands *arr,int len, int t)
{
    sort(arr, len);
    int target = (t-1) % len;//
 
    //printf("%d %d", t, target);
   for(int cur = 0; cur < len ; cur++)
   {
       //printf("[%d: %d]", arr[cur].hand, arr[cur].who);
   }
    printf("%d", arr[target].who);
 
}
 
 
int main()
{
 
int N = 0; int M = 0; scanf("%d %d", &N, &M);
M *= 2;
 
hands* arr = (hands*)malloc(sizeof(hands) * M);
 
 
for(int a = 0; a < M; a++)
{
    scanf("%d", &arr[a].hand);
    arr[a].who = (a)/2 + 1;
}
 
for(int a = 0; a < M; a++)
{
//printf("[%d %d]", arr[a].who, arr[a].hand);
}
 
 
 
 
search(arr, M, N);
 
free(arr);
return 0;
}