알고리즘/백준 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이 될 때까지 하나씩 줄이며 자리를 찾아갔다.
반응형