본문 바로가기

백준

2920 음계

그냥 for문으로 일치하는지 하나씩 확인하려다 c++에 배열의 원소가 일치하는지 알려주는게 있을 것 같아 검색해봤다. 

보니깐 어떤 사람이 set이란걸 쓰라고 했다. set은 == 연산자를 통해 원소가 일치하는지(오!) 알려주는데 대신 얘는 순서를 상관 안 한다. 그래서 좀 더 검색해보니 vector가 순서가 있는 set 인것 같았다. 그래서 이 문제는 vector를 사용해봤다.  

 

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector <int> ascending(8);
    vector <int> descending(8);
    int num;
    vector <int> input(8);
    
    for(int i = 1; i <= 8; i++)
        ascending.push_back(i);
    for(int i = 8; i >= 1; i--)
        descending.push_back(i);
    for(int i = 1; i <= 8; i++){
        scanf("%d", &num);
        input.push_back(num);
    }
    
    if(ascending == input)
        printf("ascending");
    else if (descending == input)
        printf("descending");
    else
        printf("mixed");
        
    return 0;
}

vector 3개를 만들어 하나는 ascending용으로 하나는 descending용으로, 나머지 하나는 입력을 받기 위해 썼다. 코드는 간단하다. 그냥 벡터를 초기화하고 일치하는지 확인했다. 편하네

 


알고보니 이런 방식으로도 초기화가 가능하다! (깔끔해)

    vector<int> ascending = { 1, 2, 3, 4, 5, 6, 7, 8 };
    vector<int> descending = { 8, 7, 6, 5, 4, 3, 2, 1 };

 

 

으악ㅋㅋㅋ 그리고 내가 생각한대로 vector에 안 들어갔다ㅋㅋㅋ 벡알못인거 티난다. 

 

vector<int> ascending(8);

이렇게하면 ascending = {0, 0, 0, 0, 0, 0, 0, 0} 0으로 초기화 된 크기 8의 배열이 만들어진다. 

 

ascending.push_back(i);

다음으로 push_back을 하면 배열의 바로 뒤에 숫자를 붙여준다

 

ascending  = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8 } // 16길이 배열
descending = { 0, 0, 0, 0, 0, 0, 0, 0, 8, 7, 6, 5, 4, 3, 2, 1 } // 16길이 배열
input      = { 0, 0, 0, 0, 0, 0, 0, 0, ... 입력값 8개 }

결과적으로 이렇게 생겼다!

 

이렇게 넣었다는 걸 알았을 때 엄청 웃겼다ㅋㅋㅋ 아 저게 저렇게 들어가는구나!

 

백터는 다음에 다시 정리해야겠다ㅋㅋ

 

'백준' 카테고리의 다른 글

2309 일곱 난쟁이  (0) 2019.10.08
2292 벌집  (0) 2019.10.07
11720 숫자의 합  (0) 2019.10.06
1924 2007년  (0) 2019.10.06
1152 단어의 개수  (0) 2019.10.06