알고리즘/백준 BAEK JOON

1138.한 줄로 서기

IMyoungho 2020. 5. 17. 15:37

(*)이번 문제는 너무 어렵게 풀어서 다른사람의 코드를 참고해서 글을 쓴다.

 

1138번: 한 줄로 서기

첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다 �

www.acmicpc.net

참고:https://jaimemin.tistory.com/757

 

 

< Code 설명 >

#include <iostream>
#define MAX 10
using namespace std;

int arr[MAX];

int main(){
	int n;
	cin >> n;
	for (int i = 0; i < n; i++){ // 사람 수 만큼 비교
		int pos;                 // 왼쪽의 인원
		cin >> pos;             
		for (int j = 0; j < n; j++){ 
			if (pos == 0 && arr[j] == 0){ // 왼쪽인원이 0이면서 배열값 0일때
				arr[j] = i+1;   // 해당 배열에 1+i값을 해주고
				break;          // for문 종료 -> 바로 다음 for문으로
			}
			else if (arr[j]==0) // 해당 배열이 0이면
				pos--;          // 왼쪽의 인원 변수 값을 하나줄임
		}
	}
	for (int i = 0; i <n; i++)
		cout << arr[i] << " ";
	return 0;
}

# 결국 코드에서 작동하는 원리는 다음과 같다.

자신보다 큰 왼쪽인원의 크기를 부여받은 숫자가 자기자리를 찾아가는 형식이다.

-> 나는 크기비교를 통해 진행했지만 이 분의 코드는 0을 이용해서 자리배치를 하지않은 것 비교해 진행했다.

-> pos값을 0이 될 때까지 하나씩 줄이며 자리를 찾아갔다.

반응형