문제

수 정렬하기5 백준 15688

"맞았습니다" 코드

#include <bits/stdc++.h>
using namespace std;

int n, num;
int arr[2000002];

int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);

  cin >> n;
  for(int i = 1; i <= n; i++) {
    cin >> num;
    arr[num+1000000]++;
  }

  for(int i = 0; i <= 2000000; i++) {
    while(arr[i] > 0) {
      cout << i-1000000 << '\n';
      arr[i]--;
    }
  }

  return 0;
}

리뷰

절대값이 100만 이하인 정수가 입력으로 들어오니까.
양수 음수 처리를 따로 해야겠다고 생각했었다.
일단 정답 코드를 제출하고 다른 분의 코드를 봤다.
200만 크기의 배열을 쓰면서도 어차피 입력받은 대로 더하고 빼주고 하면 입력 받은 숫자를 출력할 수 있으니까.
입력받을 때 저장하는 인덱스 : num + 1000000
출력할 때 숫자 : num - 1000000
이렇게 하면 충분했다.

나의 예전 코드

#include <bits/stdc++.h>
using namespace std;

int n, num;
int arr[2000002];

int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);

  cin >> n;
  for(int i = 1; i <= n; i++) {
    cin >> num;
    if(num < 0) arr[abs(num)+1000000]++;
    else arr[num]++;
  }

  for(int i = 2000000; i > 1000000; i--) {
    while(arr[i] > 0) {
      int temp = abs(i-1000000) * (-1);
      cout << temp << '\n';
      arr[i]--;
    }
  }
  for(int i = 0; i <= 1000000; i++) {
    while(arr[i] > 0) {
      cout << i << '\n';
      arr[i]--;
    }
  }

  return 0;
}
728x90

+ Recent posts