티스토리 뷰

예시로 주어진 것들을 직접 머릿속으로 돌려보면서 솔루션을 어떻게 짤 지 파악했다.
먼저 너비 및 높이에서의 최댓값과 해당 값의 인덱스를 루프문을 돌려 파악해둔다.

예시의 경우, (3, 80)과 (1, 70)이 각각 저장된다.
여기서, 가장 큰 값인 80은 명함을 어떻게 돌리던간에 무조건 최대값이므로 80은 고정인 셈이다.
그렇기 때문에 더 작은값인 높이 70에 해당하는 명함을 돌려봐야 한다.
여기서 문제... 무조건 명함을 돌려볼 필요가 있는가? 아니다.
명함을 돌리는 이유는, 이 예시의 경우 높이의 최대값을 줄이기 위함이다. 그런데, 돌리고 나서 그 값이 더 커지면 의미가 없어진다.
즉, 이 예시에서는 30과 70의 값을 비교해서, 30이 더 작기 때문에 돌릴 가치가 있다고 판단하고 명함을 돌린다.(명함을 90도 돌리는 것은 코드 상, 두 값을 스왑해주면 된다.)
이 행동을 명함을 돌릴 가치가 없어질 때 까지 반복하면 되는 것이다.

int answer = 0;
    bool isHeightMax;
    pair<int, int> maxWidth;
    pair<int, int> maxHeight;

값은 이렇게 선언해줬다.
이후 코드는 무한루프에서 진행하게 된다.

maxWidth = make_pair(0,0);
maxHeight = make_pair(0,0);
        for(int i = 0; i < sizes.size(); i++) {
        if(maxWidth.second < sizes[i][0]) {
            maxWidth.first = i;
            maxWidth.second = sizes[i][0];
        }
        if(maxHeight.second < sizes[i][1]) {
            maxHeight.first = i;
            maxHeight.second = sizes[i][1];
        }
    }
answer = maxWidth.second * maxHeight.second;
isHeightMax = maxWidth.second < maxHeight.second? 1 : 0;

그냥 단순하게, 최대값과 그 인덱스를 저장하는 과정이다.
이후 두 값의 비교를 통해 어느 쪽 값이 덜 큰지를 파악해둔다.

if(isHeightMax) {
        //check maxWidth index
        int index = maxWidth.first;
        if(sizes[index][0] <= sizes[index][1])
            break;
        else { //swap
            int temp = sizes[index][0];
            sizes[index][0] = sizes[index][1];
            sizes[index][1] = temp;
        }    
    } else {
        //check maxHeight index
        int index = maxHeight.first;
        if(sizes[index][0] >= sizes[index][1])
            break;
        else {  //swap
            int temp = sizes[index][0];
            sizes[index][0] = sizes[index][1];
            sizes[index][1] = temp;
        }
    }

명함을 돌릴 가치가 있니? 없어? 더이상 개선의 여지가 없으니 루프문을 나가기
명함을 돌릴 가치가 있니? 돌려. 그리고 다시 루프문 앞으로 돌아간다.
무한루프 바깥에는 값을 바로 리턴하게끔 적어줬다.

정확성 100으로 통과하였음!

다른사람의 풀이
나는 너무 코드를 쓸 때 사고 과정을 그대로 옮기려는 경향이 강한 것 같다... 안좋다는 의미임
다른 풀이를 보니, 최소값중의 최대, 최대값중의 최대를 구해서 바로 곱한다.
그냥 더 긴 쪽을 한쪽에 맞춰서 다 돌렸다는 얘기랑 일맥상통함.
아 나는 왜 이런 생각이 안되지 ㅋㅋㅋ ㅠㅠ

'■ 알고리즘 > ◻ Programmers' 카테고리의 다른 글

[C++]소수 찾기  (0) 2022.11.11
[C++] 모의고사  (0) 2022.11.11
[C++]H-Index  (0) 2022.11.10
[C++]가장 큰 수  (0) 2022.11.09
[C++] K번째수  (0) 2022.11.09
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
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 31
글 보관함