티스토리 뷰

반응형

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

 

1072번: 게임

김형택은 지금 몰래 Spider Solitaire(스파이더 카드놀이)를 하고 있다. 형택이는 이 게임을 이길 때도 있었지만, 질 때도 있었다. 누군가의 시선이 느껴진 형택이는 게임을 중단하고 코딩을 하기 시

www.acmicpc.net


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 수학
  • 이분 탐색

 


 

⊙ 문제 접근 과정

 

문제를 보자마자 무지성으로 코드를 단순하게 짜 봤다. 그리고 시간 초과가 떴다. ㅎ

 

시간 초과를 본 후 자연스럽게 투 포인터 알고리즘을 적용시켜 시간 초과를 해결했다.

 

※주의사항

   99%는 아무리 해도 100%가 되지 않는다.


 

⊙ 문제 풀이(시간 초과 코드)

 

#include <iostream>

using namespace std;

long long X, Y, Z;
int cnt=0;

int main() {
    cin >> X >> Y;
    Z=(Y*100/X);
    int temp=Z;
    
    if(Z>=99) {
        cnt=-1;
    } else {
        while(temp!=Z+1) {
            X++; Y++; cnt++;

            temp=(Y*100)/X;
        }
    }

    cout << cnt;
}

 

⊙ 문제 풀이(정답 코드)

 

#include <iostream>

using namespace std;
#define MAX 1000000000

long long X, Y, Z;
int cnt=-1;

int main() {
    cin >> X >> Y;
    Z=(Y*100/X);
    
    if(Z>=99) {
        cout << cnt;
        return 0;
    } 

    int left=0, right= MAX;

    while(left<=right) {
        int mid=(left+right)/2;
        int temp=(Y+mid) * 100 / (X+mid);

        if(Z<temp) right=mid-1;
        else left=mid+1;
    }
    
    cout << left;
}

⊙ 결과

 


⊙ 마무리

 

 

NONE

 

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

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
글 보관함