백준 알고리즘 1015번 수열 정렬 문제입니다.

(참고 - https://www.acmicpc.net/problem/1015 )


코드 ) 

#include <stdio.h>

int main() {

int i, j, testcase;

int arr[50];

int tmp[50] = {0, };

scanf("%d", &testcase);

for (i = 0; i<testcase; i++) {

scanf("%d", &arr[i]);

for (j = 0; j<i; j++) {

if (arr[j] > arr[i]) {

tmp[j]++;

}

else if (arr[j] <= arr[i]) {

tmp[i]++;

}

}

}

for (i = 0; i<testcase; i++) {

printf("%d ", tmp[i]);

}

return 0;

}


- 문제는 복잡해보이지만, 간단하게 생각해볼 수 있습니다.

앞으론 testcase에 대한 설명은 생략하도록 하겠습니다.

먼저 배열 arr를 선언해준 뒤, 값을 입력받아 저장합니다.

이후 if문을 이용하여 arr의 값을 비교 해 줄 때, 

0으로 초기화 시켜 준 tmp라는 배열을 하나 생성해주어

해당 i번째 수행 시에 tmp의 값을 1씩 증가시켜주는 로직을 이용하여 구현하였습니다.

이중 for문에서 안의 for문에서는 j=0부터 j<i까지, 

즉 i번만큼 해당 i번째 수행 시 입력받은 arr[i]의 값과, 

이미 저장되어있는 arr[j] (이때, j는 0~i-1까지)의 값을 비교하여 

tmp의 값을 변하게 합니다.


+java)

public class algo1015 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int loop = sc.nextInt();

int[] arr = new int[50];

int[] rst = new int[50];

for(int i=0; i<loop; i++) {

arr[i] = sc.nextInt();

for(int j=0; j<i; j++) {

if(arr[j] > arr[i])

rst[j]++;

else

rst[i]++;

}

}

for(int i=0; i<loop; i++) {

System.out.println(rst[i]);

}

}

}


WRITTEN BY
SiriusJ

,