[C++] 백준 11004 K번째 수
2021. 3. 26.
반응형

www.acmicpc.net/problem/11004

 

11004번: K번째 수

수 N개 A1, A2, ..., AN이 주어진다. A를 오름차순 정렬했을 때, 앞에서부터 K번째 있는 수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

 

1. 서론

 

백준에는 K번째 수라는 문제가 굉장히 많으니 주의해야 한다.... 나도 모르고 골드 3짜리 문제 풀다가 짜증 나 죽을 뻔

 

2. 문제 풀이

 

배열의 크기 n과 k값이 주어진다. 그리고 그다음 배열의 값이 주어지는데 그 배열을 오름차순으로 정렬했을 때 k번째 수를 출력하는 문제다.

 

문제 자체는 되게 단순하다. 입력값들을 쭉 받고 정렬한 후 k번째 수를 출력하면 된다. 근데 그냥 iostream을 쓰면 시간 초과가 난다.

그래서 cstdio 라이브러리에 있는 scanf를 썼다. 그리고 난 처음에 쫄아서 배열 값을 최대로 해서 그냥 배열로 정의했었는데 의외로 백터로 풀어도 잘 돌아간다. scanf만 쓴다면....

 

3. 코드 설명

 

#include <cstdio>
#include <algorithm>

using namespace std;

int a[5000000];

int main()
{
    int n, k, i;
    
    scanf("%d %d", &n, &k);

    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);
    
    sort(a, a + n);

    printf("%d\n", a[k - 1]);
}

 

이걸 풀다 재밌는 걸 발견했다. 보면 배열의 크기가 엄청 큰데 이것 때문에 시간 초과가 나는지 찾아보다가 

 

m.blog.naver.com/PostView.nhn?blogId=amy_hmy&logNo=221028600832&proxyReferer=https:%2F%2Fwww.google.com%2F

 

함수 내 지나치게 큰 배열 선언(C, C++)

최근 알고리즘 문제를 푸는 중 크기가 300000인 배열을 미리 선언해놓고 사용할 일이 있어서 int variable[...

blog.naver.com

이런 글을 발견했다. 그래서 전역 변수로 배열을 선언했는데 사실 그냥 cin의 문제로 main함수 안에 넣어도 잘 돌아간다 ㅎ

 

 

 

반응형

'Algorithm' 카테고리의 다른 글

[C++] 백준 1302 베스트셀러  (0) 2021.03.27
[C++] 백준 1543 문서 검색  (0) 2021.03.26
[C++] 백준 2003 수들의 합 2  (0) 2021.03.10
[C++] 백준 10989 수 정렬하기 3  (0) 2021.03.01
[C++] 백준 11650 좌표 정렬하기  (0) 2021.02.27
myoskin