BOJ - 10989 (C++)

2023. 2. 16. 20:14·백준

https://www.acmicpc.net/problem/10989

10989번: 수 정렬하기 3

첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.

www.acmicpc.net


어떻게 풀어야 할까?

아마 이 문제를 처음 접할 때,
선택 정렬 알고리즘을 사용할 것 이다.

그러면 틀린다.
왜냐면 배열을 int 형으로 잡고 10,000,000 계산한다고 가정했을때,
보수적으로 잡아도 40MB의 메모리가 소요되기 때문이다.

선택 정렬로 풀면 이중 for문이 들어가게 된다. -> 시간 초과에서 걸린다.
그렇다면,
sort()함수를 이용해서 풀면 될까? -> 메모리 초과로 불가능

그래도 시간 초과가 난다면?

cout, cin을 사용해서 출력 및 입력을 했을 가능성이 크다.

그렇다면?
printf, scanf를 사용해서 출력해야한다.

cout, cin 보다 printf, scanf가 속도가 더 빠르다.


다른 방법을 사용한다.
10001개의 공간을 가진 int형 배열을 선언한다. (왜냐면 입력되는 수가 1<= n <= 10000 이기 때문에)

만약, 7이 2번 입력된다고 가정하면
arr[7]의 값을 2번 증가시킨다.

1000이 3번 입력된다면?
arr[1000]의 값을 3번 증가

그리고 1~10000까지 for문을 반복하면서,
해당 인덱스에 있는 값을 그 값만큼 출력해주면 된다.

예를 들어,
arr[100]에 3이 저장되어 있다면,
100을 3번 출력해주면 된다.


#include <iostream>
using namespace std;

int main(void)
{
    int N;
    scanf("%d", &N);

    int arr[10001] = {0};

    for(int i = 0; i < N; i++){
        int n;
        scanf("%d", &n);
        arr[n]++;
    }

    for(int i = 1; i < 10001; i++){
        for(int j = 0; j < arr[i]; j++){
            printf("%d\n", i);
        }
    }
}

문제를 풀며 얻어갈 것

printf / scanf가 속도가 훨씬 빠르다는 것.
배열을 사용해서 정렬을 할 수 있다는 것.

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

BOJ - 2581 소수 (C++)  (0) 2023.02.09
BOJ - 3003(C++)  (0) 2022.12.30
BOJ - 1008(C++)  (0) 2022.12.27
'백준' 카테고리의 다른 글
  • BOJ - 2581 소수 (C++)
  • BOJ - 3003(C++)
  • BOJ - 1008(C++)
Jminu
Jminu
  • Jminu
    뇌 구조가 바이너리
    Jminu
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C프로그래밍
        • 오류해결
        • 개인 공부
        • Programming Lab(학교수업)
        • MemoryTracker
      • C++
        • 개인 공부
      • 자료구조(Data Structure)
      • ARM arch
        • Cortex-M
        • FreeRTOS
      • 컴퓨터 공학(Computer Science)
        • OS
        • 컴퓨터 구조
      • Qualcomm 기업과제
      • Linux
        • start_contribute()
        • start_analyse()
      • Web
      • 똥글
      • 백준
      • Git 학습
        • 오류해결
        • 학습중
      • Python
        • 오류해결
        • 개인 공부
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    리눅스
    토발즈
    앤드류모튼
    c언어
    파일 입출력
    Git
    피보나치
    rubik pi
    드라이버 분석
    arm
    순환
    C++
    백준
    Qualcomm
    INIT
    포인터
    커널 기여
    자료구조
    이진 트리
    버퍼
    yolo
    소수
    커널
    rubikpi3
    동적메모리
    스택
    시스템콜
    commit
    파이썬
    Branch
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Jminu
BOJ - 10989 (C++)
상단으로

티스토리툴바