본문 바로가기

백준

1242 소풍

아 정말 너무너무 어렵다. 

처음에 나이브하게 풀었더니 시간초과가 났다. (예상했다)

시간을 줄이기 위해 삭제 할 때마다 상대적인 좌표를 사용해서 풀려고 했다. 

그런데 틀렸다..... 뭔가 생각이 꼬여서 틀린 것 같다. 

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <bitset>
#include <stdio.h>
#include <math.h>
#include <sstream>
#include<cassert>
#include <climits>

#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()
#define MAXV 1000000007

using namespace std;
using i64 = long long int;
using ii = pair<int, int>;
using iis = pair<int, string>;
using ii64 = pair<i64, i64>;
using iii = tuple<int, int, int>;

int arr[5000005];

int main() {
    int n, k, m;
    scanf("%d %d %d", &n, &k, &m);
    
    int c = m;
    int left = n;
    // 한 번 이동할 때마다 한 명씩 제거
    while(left) {
        k = k % left == 0 ? left : k % left;
        
        if (k == c) printf("%d", n - left + 1);
        else if (k < c) c = c - k;
        else c = (left - k) + c;
        
        left--;
    };
    
    return 0;
}

 

결국 스터디원 코드 보고 파악했다. 

ㅠㅠ

 

 

ㅋㅋㅋ

그런데도 이해 못 함

이정도 고민했으면 어쩔 수 없다고 생각하고?

어떻게 풀어야 하는지 아이디어는 얻었으니 다음에 비슷한 문제 풀 때는 더 수월하게 풀기를 희망한다...

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <bitset>
#include <stdio.h>
#include <math.h>
#include <sstream>
#include<cassert>
#include <climits>

#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()
#define MAXV 1000000007

using namespace std;
using i64 = long long int;
using ii = pair<int, int>;
using iis = pair<int, string>;
using ii64 = pair<i64, i64>;
using iii = tuple<int, int, int>;

int arr[5000005];

int main() {
	int n, m, k;
    scanf("%d %d %d", &n, &k, &m);
	
	m--;
	int start = 0;
	int ret;
	int cnt = n;
	for (int i = 1; i <= cnt; i++) {
		int remove = (start + k - 1) % n;
		if (remove == m) {
			ret = i;
			break;
		}
		m -= remove < m; 
		n--;
		start = remove;
	}
	printf("%d\n", ret);
	return 0;
}

 

'백준' 카테고리의 다른 글

24524 아름다운 문자열  (0) 2023.01.14
23083 꿀벌 승연이  (0) 2023.01.14
13019 A를 B로  (0) 2022.12.17
12915 대회 개최  (0) 2022.12.17
6503번 망가진 키보드 푸는 중  (0) 2022.11.26