반응형
LinkedIn 개발자로 성장하면서 남긴 발자취들을 확인하실 수 있습니다.
Github WWDC Student Challenge 및 Cherish, Tiramisul 등 개발한 앱들의 코드를 확인하실 수 있습니다.
개인 앱 : Cherish 내 마음을 들여다보는 시간, 체리시는 디자이너와 PM과 함께 진행 중인 1인 개발 프로젝트입니다.
10년 후, 20년 후 나는 어떤 스토리 텔러가 되어 있을지 궁금하다. 내가 만약에 아직 조금 더 탐구하고 싶은 게 있고, 궁금한 게 있다면, 그게 설사 지금 당장의 내 인생에 도움이 안 되는 것 같더라도 경험해보자. 그 경험들을 온전히 즐기며 내 것으로 만들고, 내 일에 녹여내고... 그러다보면 그 점들이 모여 나란 사람을 그려내는 선이 될 테니까.

Recent Posts
Recent Comments
Total
관리 메뉴

꿈꾸는리버리

[백준 알고리즘] 7568 덩치 본문

오뚝이 개발자/알고리즘

[백준 알고리즘] 7568 덩치

rriver2 2021. 12. 6. 00:29
반응형

 브루트 포스( Brute force) 

조합 가능한 모든 문자열을 하나씩 대입해 보는 방식으로 암호를 해독하는 방법.

: 영어로 brute는 "짐승 같은, 난폭한"이라는 뜻이고, brute-force는 "난폭한 힘, 폭력"이라는 뜻이다. 오래 걸리는 데다 자원이 엄청나게 들어서 얼핏 보면 무식하다고 생각할 수도 있겠지만, 항상 정확도 100%를 보장한다는 점에서 암호 해독법 중 가장 확실하고 무서운 방법이다. 

문제:   https://www.acmicpc.net/problem/7568

 

7568번: 덩치

우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩

www.acmicpc.net

풀이방법:    

1) 2차원 배열 Array[N][2]에 몸무게와 키 넣기

2) ranking =1 에서 시작해서 N의 길이 만큼 반복하며 몸무게와 키 둘 다 큰 행이 있다면 ranking++하기

작성한 코드는 다음과 같다. 

#include <iostream>
using namespace std;

void big_body(int Array[][2], int N, int sequence){
    int ranking = 1;
    int weight = Array[sequence][0];
    int height = Array[sequence][1];
    for(int i = 0; i<N; i++){
        if(Array[i][0] > weight && Array[i][1] > height){
            ranking ++;
        }
    }
    cout <<ranking<<" ";
    return;
}

int main() {
    int N;
    cin>> N;
    int Array[N][2];
    for(int i = 0; i< N;i++){
        cin >> Array[i][0]>> Array[i][1];
    }
    for(int i = 0; i< N;i++){
    big_body(Array,N,i);
    }
    cout << "\n";
    return 0;
}

 

성공한 사진!    

  MEMO 

 

처음에는 몸무게 순위 정렬하고, 키 순위 정렬해서 .... 하려다가 지금 하고 있는 주제가 브루트 포스임을 기억해서! 다시 알고리즘을 짰다. 한번에 생각나고 싶은데 그러지 못해서 안타까운 마음이 가득할 뿐이다.. 

 

백준 문제를 풀 때마다 다 하고 나서도 다른 사람들의 코드를 한번 보는 게 낫다는 생각이 들어서 확인하는 편이다.

pair형식을 이용한 풀이가 많아 나도 공부를 해서 코드를 다시 작성해보았다.

 

우선 pair에 대해 알아보자. 

혼자 공부하는 사람이라면 구글링을 하는 경우가 많은데, 좋은 내용을 찾는데에 오랜 시간이 걸린다. 그래서 주로 정리된 공식 사이트를 이용하는 것이 좋은데, 나는 C++은 다음 사이트를 통해 확인한다. 개인적으로는 가끔 한국어로 이상하게 해석되어 있어서, 영문 버전으로 확인하는 것이 더 좋은 것 같다.

https://docs.microsoft.com/ko-kr/cpp/standard-library/pair-structure?view=msvc-170

 

pair 구조체

자세한 정보: pair 구조

docs.microsoft.com

우선, <utility> 헤더 파일을 include해야 한다는 것을 알 수 있다.

 

microsoft docs

아래는 pair에 관한 설명이다.

 

 

microsoft docs

솔직히 말하면 아직 class, struct를 정복한 게 아니라서 자세히는 모르겠었다.

하지만 이제 나는 알지.. 100%를 이해하지 못하더라도 써볼 수는 있다는 것 ! 자신감을 가지자.

글을 읽고 어떤 느낌인지는 잡은 후 

 

- T1과 T2가 한 쌍을 이루고, 각각은 변수의 형이다. 

- 지정한 값은 .first와 .second로 접근이 가능하다.

 

그리고 그 느낌을 예시를 보고 조금 더 굳게 다진다..

microsoft docs
microsoft docs

pair <첫변수형, 두번째변수형> pair명( 첫변수, 두번째 변수);

pair명.first == 첫변수

pair명.second == 두번째 변수

--> 이제 바로 적용 해보자 !

작성한 코드는 다음과 같다. 

#include <iostream>
#include <utility>
using namespace std;

void big_body(pair<int,int> Array[], int N, int sequence){
    int ranking = 1;
    int weight = Array[sequence].first;
    int height = Array[sequence].second;
    for(int i = 0; i<N; i++){
        if(Array[i].first > weight && Array[i].second > height){
            ranking ++;
        }
    }
    cout <<ranking<<" ";
    return;
}

int main() {
    int N;
    cin>> N;
    pair<int,int> Array[N];
    for(int i = 0; i< N;i++){
        cin >> Array[i].first>> Array[i].second;
    }
    for(int i = 0; i< N;i++){
    big_body(Array,N,i);
    }
    cout << "\n";
    return 0;
}

성공한 사진!    

 

 

반응형
Comments