BOJ 1072번 게임 문제

이분탐색으로 풀면 된다. 99%일때 예외 경우를 따로 해줘야한다. 1패라도 있으면 승률이 100%가 될 수 없다.

1072.cpp

#include <bits/stdc++.h>
#define MAX_ 1000000000
using namespace std;
typedef long long ll;
int main() {
    ll x, y, z, low, high, mid, test_z;
    cin >> x >> y;
    z = 100 * y / x;
    if (z >= 99) {
        cout << -1;
        return 0;
    }

    low = 0;
    high = MAX_;

    while (low <= high) {
        mid = (low + high) / 2;
        test_z = 100 * (y + mid) / (x + mid);
        if (z < test_z) {
            high = mid - 1;
        } else {
            low = mid + 1;
        }
    }
    cout << low;
}

BOJ 10539번 수빈이와 수열

수열 B가 3, 2, 3, 5일 떄

  1. 3 = 3/1

  2. 2 = (3+x)/2 에서 x = 1

  3. 3 = (3+x+y)/3 에서 y = 5

  4. 5 = (3+x+y+z)/4 에서 z = 11

10539.cpp

#include <bits/stdc++.h>
using namespace std;
int arr[101];
int res[101];
int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> arr[i];
    }
    int plus = 0;
    res[1] = arr[1];
    for (int i = 2; i <= n; i++) {
        plus = 0;
        for (int j = 1; j <= i; j++) {
            plus += res[j];
        }
        res[i] = arr[i] * i - plus;
    }
    for (int i = 1; i <= n; i++) {
        cout << res[i] << ' ';
    }
}

BOJ 2953번 나는 요리사다 문제

5x4 배열에서 행마다 sum을 구하고 가장 큰 행의 번호를 출력한다.

2953.cpp

#include <bits/stdc++.h>
using namespace std;
int arr[5][4];
int main() {
    int sum, max_ = 0;
    int cook = 0;
    for(int i=0;i<5;i++){
        for(int j=0;j<4;j++){
            cin >> arr[i][j];
        }
    }
    for (int i = 0; i < 5; i++) {
        sum = 0;
        for (int j = 0; j < 4; j++) {
            sum += arr[i][j];
        }
        if (sum > max_) {
            cook = i + 1;
            max_ = sum;
        }
    }
    cout << cook << ' ' << max_;
}

BOJ 1193번 분수찾기 문제

배열을 45도 회전시키면 아래와 같이 나온다.

1/1

1/2 2/1

3/1 2/2 1/3

1/4 2/3 3/2 4/1

5/1 4/2 3/3 2/4 1/5

1/6 2/5 3/4 4/3 5/2 6/1

분자 분모의 합이 1행에서 2, 2행에서 3, 3행에서 4, 4행에서 5..가 되고,

홀수행은 합-1부터 시작해서 1씩 감소한다.

짝수행은 1부터 시작해서 합-1까지 증가한다.

1193.cpp

#include <bits/stdc++.h>
#define MAX_ 10000
using namespace std;

int main() {
    int n;
    cin >> n;

    int i = 1;
    int s = 0;
    while (true) {
        if (n - i <= 0) {
            break;
        }
        n -= i;
        i++;
        s++;
    }

    if (s % 2 == 0) {
        cout << s + 2 - n << "/" << n;
    } else {
        cout << n << "/" << s + 2 - n;
    }
}

YOLO Build on Windows

  • CUDA, cuDNN, OpenCV, VS 2017을 사용합니다.
  • AlexyAB의 darknet을 이용했습니다.

빌드하기 전 준비사항

  • VS 2017은 설치되어있다는 가정하에 진행하겠습니다.

    • Visual Studio Installer에서 데스크톱용 VC++ 2015.3 v14.00(v140) 도구집합 먼저 설치 하시고 진행하셔야 합니다(CUDA 설치 전에 해야하기 때문).
      Image
  • 위 github에서 repository를 Downlaoad 받습니다. 이 경로를 darknet이라고 부르겠습니다.

  • CUDA와 cuDNN을 설치하셔야 하는데, 버전을 기억해두셔야 합니다.

    • CUDA : https://developer.nvidia.com/cuda-downloads
      • Visual Studio Integration 체크 해서 설치해야합니다.
        Image
      • 자신의 CUDA 버전에 맞는 cuDNN을 다운받고 압축을 푼 후 CUDA가 설치된 경로에 붙여넣기 하면 됩니다. CUDA와 똑같은 경로를 cudnn이라는 이름으로 환경변수 등록까지 마쳐야합니다.
  • 다음으로 OpenCV를 다운받습니다.

    • OpenCV Download 링크에서 들어가서 다운받습니다.
    • 저는 2.4.13.6 버전을 다운받았습니다.
  • OpenCV를 설치한 경로는 환경변수에 아래와 같이 등록해줘야합니다.

    • 제 opencv 경로는 C:\opencv\opencv2.4.13.6\으로 시작합니다.

빌드

  • darknet\build\darknet\darknet.sln을 실행합니다.
  • 먼저 상단의 메뉴에서 Release, x64로 바꿔줍니다.
    Image
  • 프로젝트 속성 - C/C++ - 일반 - 추가 포함 디렉터리에서 opencv 경로를 자신의 경로에 맞게 수정합니다.

Image

  • 프로젝트 속성 - 링커 - 일반 - 추가 라이브러리 디렉터리에서 opencv 경로를 수정합니다.

Image

  • 빌드 종속성을 자신의 CUDA 버전에 맞게 수정합니다.

Image

Image

  • 빌드(F7)를 누르면 끝입니다!

+ Recent posts