사과먹는중
당근먹는하니
귀엽고 행복해
당근먹는하니
전체 방문자
오늘
어제
  • 분류 전체보기 (274)
    • 다람쥐🐿 (26)
    • C++ 공부빵야 (7)
    • 공부👻 (5)
    • 프론트엔드✏️ (228)
      • 코드캠프 (120)
      • 팀 프로젝트✨ (31)
      • 개인공부 (67)
    • 프론트엔드 - 바닐라js (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • HTML
  • ssg
  • 코드캠프
  • 팀 프로젝트
  • 코딩 부트캠프
  • javascrpit
  • CSS
  • refreshtoken
  • 리액트
  • 배포
  • 자바스크립트
  • 알고리즘
  • 공통 컴포넌트
  • graphql
  • javascript
  • typescript
  • emotion
  • 회고
  • algorithm
  • 부트캠프
  • 프로그래머스
  • JS
  • React-hook-form
  • 팀프로젝트
  • 배열
  • 코딩
  • 프론트엔드
  • next.js
  • react
  • 팀플

최근 댓글

최근 글

티스토리

250x250
반응형
hELLO · Designed By 정상우.
당근먹는하니
C++ 공부빵야

1월 28일 백준 코딩테스트

1월 28일 백준 코딩테스트
C++ 공부빵야

1월 28일 백준 코딩테스트

2024. 2. 24. 01:04
728x90
반응형

 

백준 1008

두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.

zz 이게 이렇게 어려울 일인가 약간 자괴감 들고 괴로워.

 

아주 처음에 c++ 처음 배울 때 *랑 / 가지고 소수점 버리는 퀴즈?를 풀었었는데,

문제 조건을 이해를 못 했는지) 그거랑도 헷갈려서 계속 틀렸었다. 

 

 

#include <iostream>
using namespace std;

int main () {
    double a,b;
    cin >> a >> b;

    cout.precision(11);
    
    cout << a/b << endl;
}

 

 

예전에(2022) 짜던 코드를 보니 이런 게 써져있었다. (위의 문제랑 상관없음)

 

 

 

 

문제 11758

2차원 좌표 평면 위에 있는 점 3개 P1, P2, P3가 주어진다. P1, P2, P3를 순서대로 이은 선분이 어떤 방향을 이루고 있는지 구하는 프로그램을 작성하시오.

 
 
#include <iostream>
using namespace std;

    struct Coord {
        int x;
        int y;
    }; // x, y 구조체 생성 
    
    
    enum Direction {
        COUNTER_CLOCKWISE = 1, // 반시계 방향
        CLOCKWISE = -1, // 시계 방향
        COLLINEAR = 0, // 일직선
    };
    
    // 외적 후 결과 반환 함수 
    Direction getCrossProduct(const Coord& p1, const Coord& p2, const Coord& p3) {
     int crossProduct = (p2.x - p1.x) * (p3.y - p2.y) - (p2.y - p1.y) * (p3.x - p2.x);
     
     if (crossProduct > 0) return COUNTER_CLOCKWISE;
     else if (crossProduct < 0) return CLOCKWISE; 
     else return COLLINEAR; 
    };
        
int main () {

    Coord coords[3];
    
    for (int i = 0; i < 3; i++) 
    {
        cin >> coords[i].x >> coords[i].y;
    }; // 좌표 세 개 입력 받기
    
    // 좌표를 넣은 뒤 외적한 결과 값을 받는다. 
    Direction result = getCrossProduct(coords[0], coords[1], coords[2]);
    
    
    cout << result << endl;
    return 0;
}

 

구조체는 몰라도 enum은 굳이 쓸 필요 없겠지만, 복습 겸 써보았다. C++을 써보는 게 거의 2년만이라...

 

 

 

문제 3693 컨테이너

 

항구를 운영하는 상근이는 컨테이너 박스를 보관할 주차장을 건설하려고 한다.

상근이의 항구가 있는 지역은 진흙진 땅이기 때문에, 단단한 땅을 만드는 비용이 매우 비싸다. 따라서, 상근이는 필요 이상으로 주차장을 크게 만들지 않으려고 한다.

컨테이너의 크기는 길이 40미터 너비 8미터이다. 한 컨테이너를 다른 컨테이너 위에 쌓을 수 있고, 최대 5개까지 쌓을 수 있다. 한 행에 있는 컨테이너 사이에는 공간이 4미터 필요하다. 또, 행과 행 사이에는 공간이 2미터가 필요하다. 모든 컨테이너는 같은 방향으로 놓여져야 한다.

주차장의 크기는 직사각형이어야 한다. 상근이가 원하는 수용 가능 컨테이너의 수가 주어졌을 때, 가장 좋은 주차장의 크기를 구하는 프로그램을 작성하시오. 먼저, 주차장의 면적이 작아야 하며, 되도록 정사각형과 가까워야 한다.

예를 들어, 아래와 같이 총 컨테이너 박스가 쌓인 것이 8개 있는 형태를 보관하는 가장 좋은 주차장의 크기는 92 × 42 = 3864이다.

 

 

#include <iostream>
#include <cmath>

using namespace std;

typedef long long LL;

const LL dx = 1000000;

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

    while (runs--) {
        LL N;
        cin >> N;

        // 주어진 수 N을 5로 나눈 몫을 새로운 N으로 설정
        N = (N + 4) / 5;

        // N의 대략적인 제곱근을 계산하여 설정
        LL approx = (int)sqrt(2.2 * N);

        // 최적의 값을 저장할 변수 초기화
        LL bestA = 1LL << 60, bestx = -1, besty = -1;

        // 대략적인 제곱근 주변에서 반복
        for (LL x = max(1LL, approx - dx); x < approx + dx; x++) {
            LL y = (N + x - 1) / x;
            LL A = (10 * x + 2) * (44 * y + 4);

            // 현재의 A가 최적인지 확인
            if (A < bestA || (A == bestA && abs(10 * x + 2 - 44 * y - 4) < abs(bestx - besty))) {
                bestA = A;
                bestx = 10 * x + 2;
                besty = 44 * y + 4;
            }
        }

        // bestx와 besty를 큰 순서로 정렬하여 출력
        if (bestx < besty) swap(bestx, besty);
        cout << bestx << " X " << besty << " = " << bestA << endl;
    }

    return 0;
}

 

문제 해설을 바탕으로 chatGPT랑 얘기하면서 수정한 것...

그치만 잘 이해가 안된다.

 

세 명에게나 도움을 구했고,,,

#include <iostream>
#include <cmath>
#include <utility>

using namespace std;

typedef long long ll;


int main() {


    // 0. 컨테이너 개수 입력 받기
    int N;
    cin >> N; 

    int n = N;

    // 0. pair 클래스 생성

    pair<int, int> pair;

    // 1. 순서쌍 구하기
    for (int = 1; i < n; i++) {
        int j = ceil(n / i); // 가로에 몇 개(i)들어가는 지 알면 세로는 최소 몇 개여야 하는 지 구할 수 있다. 
        pair.append([i,j]);
    }


    // 2. 길이로 변환, 면적 구하기

    

    // 3. 면적이 최소인 순서쌍 구하기

    // 적당히 큰 수로 설정
    int area = 100000; 
    int idx = 100000; 

    for (int i = 1; i < n ; i++) {

        // area보다 작으면, 즉 cal_area가 더 최적이라면, 
        if (area > cal_area) {
            area = cal_area; 
            idx = i; 
        }
    }

    // pair[idx] 가 best choice 
    int test_cases;
    cin >> test_cases;

 

    return 0;
}

 

 

typedef가 뭔지부터 검색하고 그랬다..ㅠ

너무 오래돼서, long long을 ll로 부르겠다 ~ 라는 뜻인 것도 아예 까먹어버렸다.

 

답을 낸 것은 아닌데, 그냥 풀이 흐름만 적어봤다. 

728x90
반응형
저작자표시 비영리 동일조건 (새창열림)

'C++ 공부빵야' 카테고리의 다른 글

조건문과 난수  (0) 2021.12.15
구구단, 홀짝 숙제 흐름  (0) 2021.12.13
반복문  (0) 2021.12.13
#Include, 컴파일 등 12월 7일  (0) 2021.12.11
연산자  (0) 2021.12.10
    'C++ 공부빵야' 카테고리의 다른 글
    • 조건문과 난수
    • 구구단, 홀짝 숙제 흐름
    • 반복문
    • #Include, 컴파일 등 12월 7일
    당근먹는하니
    당근먹는하니

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.