티스토리 뷰

반응형

https://www.acmicpc.net/problem/1138

 

1138번: 한 줄로 서기

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

www.acmicpc.net


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 구현

 


 

⊙ 문제 접근 과정

 

이번 문제를 풀 때 vector container의 멤버 함수 중 v.insert()를 사용했다.

v.insert()에 대해선 아래에 적어놨다!

 

거꾸로 탐색하여 조건에 맞게 insert()를 사용해주었다.

 

ex) 입력 N=4, arr={2, 1, 1, 0}

 

  1. v = 4  (마지막 arr 값은 항상 0이다.)
  2. v = 4 3  (3번은 왼쪽에 1명 존재)
  3. v = 4 2 3  (2번도 왼쪽에 1명 존재)
  4. v = 4 2 1 3  (1번은 왼쪽에 2명 존재)

⊙ v.insert()

 

v.insert()의 형태는 두 가지가 있다.

 

1. v.insert(a, b)

   -a의 위치에 b 삽입

 

2. v.insert(a, b, c)

   -a의 위치에 c를 b개 삽입


⊙ 문제 풀이

 

#include <iostream>
#include <vector>

using namespace std;

int N;
int arr[11];
vector<int> v;

int main() {
    cin >> N;

    for(int i=0;i<N;i++) 
        cin >> arr[i];
    

    for(int i=N-1;i>=0;i--) {
        vector<int>::iterator iter=v.begin();
        for(int j=0;j<arr[i];j++) 
            iter++;
        v.insert(iter,i+1);
    }    

    for(int i=0;i<v.size();i++)
        cout << v[i] << " ";
}

⊙ 결과

 


⊙ 마무리

 

 

기능을 많이 알 수록 코드 줄이 짧아진다.

 

좋아요는 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함