백준 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로 부르겠다 ~ 라는 뜻인 것도 아예 까먹어버렸다.
답을 낸 것은 아닌데, 그냥 풀이 흐름만 적어봤다.
'C++ 공부빵야' 카테고리의 다른 글
조건문과 난수 (0) | 2021.12.15 |
---|---|
구구단, 홀짝 숙제 흐름 (0) | 2021.12.13 |
반복문 (0) | 2021.12.13 |
#Include, 컴파일 등 12월 7일 (0) | 2021.12.11 |
연산자 (0) | 2021.12.10 |