줘이리의 인생적기

백준 c++ 1138번 한 줄로 서기 본문

공부/백준

백준 c++ 1138번 한 줄로 서기

줘이리 2020. 5. 10. 00:11
728x90

문제 바로가기(출처) : https://www.acmicpc.net/problem/1138

 

1138번: 한 줄로 서기

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

www.acmicpc.net

 

 

 

 

설명

백준 1138번 문제 한 줄로 서기 문제입니다.

이해를 못해서 한참 읽었는데요.

 

입력 시 키 1부터 순서대로 왼쪽에 자신보다 키 큰 사람이 몇 명 있는지 주어집니다.

키 1인 사람부터 왼쪽에 몇 명 있는지 검사 하면서 오른쪽으로 한칸 씩 자리 이동 합니다.

키 큰 사람들을 다 지나쳤다면 그 자리에 맞는 위치와 자신의 키를 부여받습니다.

키 2인 사람을 검사합니다. 같은 원리로 수행합니다.

키 3도 동일

. . . 

 

서있는 순서대로 키를 출력합니다.

 

 

코드

#include <iostream>
using namespace std;

int P[5];	  //인덱스 번호 = 키, 값 = 자신보다 키큰사람 명수

int main() {
	int N, left;
	cin >> N;   //사람 수 입력, 예제에서는 4명 입력.

 	for (int i = 0; i < N; i++) {   //0부터 하지만 i+1이 키
		cin >> left;   //키가 1인 사람부터 왼쪽 키가 큰 사람 수 입력
        
		for (int j = 0; j < N; j++) {
   			if (left == 0 && P[j] == 0) {  //키 큰 사람들을 지나쳤고 자신의 자리라면
    			P[j] = i + 1;           //P[j]는 자신의 위치, i+1은 키
    			break;
   			}
   			else if (P[j] == 0) {  //키 큰 사람이 남았다면 돌아가서 j++
    			left--;
   			}
		}

	}
	for (int i = 0; i < N; i++) {
		cout << P[i] << ' ';   //서 있는 순서대로 키 출력
    }

	return 0;
}

 

결과

 

 

 

지적 및 개선사항은 언제든지 댓글로 부탁드립니다!

'공부 > 백준' 카테고리의 다른 글

백준 C++ 2588번 곱셈  (1) 2020.05.12
백준 c++ 1330번 두 수 비교하기  (0) 2020.05.11
백준 c++ 1110번 더하기 사이클  (0) 2020.05.08
백준 c++ 1008번 A/B  (0) 2020.05.08
백준 c++ 1001번 A-B  (0) 2020.05.08