안녕하세요.

여행벌입니다.


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

 

1002번: 터렛

각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.

www.acmicpc.net

[알고리즘설계]

점과 거리가 주어지면 우리는 원을 2개 그릴 수 있고, 두 개의 원 둘레 위에 류재명이 있을 수 있으므로,

두 원의 관계에 따라 정답을 출력하면 된다.

#include<iostream>

int main(void) {
	int test_case;
	std::cin >> test_case;
	while (test_case) {
		int x1, y1, r1, x2, y2, r2;
		std::cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
		//두 원이 같은 경우
		if (x1 == x2 && y1 == y2 && r1 == r2)
			std::cout << -1 << '\n';
		//두 원이 중심은 같으나 반지름이 다른 경우
		else if (x1 == x2 && y1 == y2 && r1 != r2)
			std::cout << 0 << '\n';
		//두 원이 외접
		else if (((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)) == ((r1 + r2) * (r1 + r2)))
			std::cout << 1 << '\n';
		//두 원이 내접
		else if (((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)) == ((r1 - r2) * (r1 - r2)))
			std::cout << 1 << '\n';
		//두 점에서 만날 경우
		else if (((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)) < ((r1 + r2) * (r1 + r2)) && ((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)) > ((r1 - r2) * (r1 - r2)))
			std::cout << 2 << '\n';
		else
			std::cout << 0 << '\n';
		/*
		//두 원이 바깥에서 안 만날 경우
		else if (((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)) > ((r1 + r2) * (r1 + r2)))
			std::cout << 0 << '\n';
		else //if (((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)) < ((r1 - r2) * (r1 - r2)))
			std::cout << 0 << '\n';*/
		test_case--;
	}
}

열심히 공부하고 노력하고 있는 꿈 많은 예비 개발자입니다.

혼자서 공부한 내용을 정리하고 포스팅하다 보니 틀린 내용이 있을 수도 있습니다.

많은 조언과 가르침 주실 분은 댓글로 자유롭게 남겨주셔도 좋을 것 같습니다! 

감사합니다.

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ] 1012 - 유기농 배추  (0) 2019.08.21
[BOJ] 1009 - 분산처리  (0) 2019.08.21
[BOJ] 17174 - 전체 계산 횟수  (0) 2019.08.21
[BOJ] 1101 - Fly me to the Alpha Centauri  (0) 2019.08.21
[BOJ] 1436 - 영화감독 숌  (0) 2019.08.21

안녕하세요.

여행벌입니다.

충남대학교 교내 대회 문제로 잘 읽고 그대로 구현하면 어렵지 않은 것 같습니다.


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

 

17174번: 전체 계산 횟수

첫 번째 줄에 환전한 금액 N과 묶음의 크기 M이 주어진다. (2 ≤ N ≤ 100,000, 2 ≤ M ≤ N)

www.acmicpc.net

[알고리즘설계]

N, M이 주어지면 그대로 묶으면서 계속 Count를 해준다.

#include<cstdio>

int main(void) {
	int N, M;
	scanf("%d %d", &N, &M);
	int q = N, total = 0;
	while (1) {
		total += q;
		q /= M;
		if (q < 1)
			break;
	}
	printf("%d", total);
}

열심히 공부하고 노력하고 있는 꿈 많은 예비 개발자입니다.

혼자서 공부한 내용을 정리하고 포스팅하다 보니 틀린 내용이 있을 수도 있습니다.

많은 조언과 가르침 주실 분은 댓글로 자유롭게 남겨주셔도 좋을 것 같습니다! 

감사합니다.

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ] 1009 - 분산처리  (0) 2019.08.21
[BOJ] 1002 - 터렛  (0) 2019.08.21
[BOJ] 1101 - Fly me to the Alpha Centauri  (0) 2019.08.21
[BOJ] 1436 - 영화감독 숌  (0) 2019.08.21
[BOJ] 2456 - 나는 학습회장이다.  (0) 2019.08.21

안녕하세요.

여행벌입니다.

오늘은 예전부터 도전했으나.. 계속 실패를 하다 최근에 푼 백준 1011번 문제를 다뤄보겠습니다.


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

 

1011번: Fly me to the Alpha Centauri

우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행사가 되어 새로운 세계에 발을 내려 놓는 영광의 순간을 기다리고 있다. 그가 탑승하게 될 우주선은 Alpha Centauri라는 새로운 인류의 보금자리를 개척하기 위한 대규모 생활 유지 시스템을 탑재하고 있기 때문에, 그 크기와 질량이 엄청난 이유로 최신기술력을

www.acmicpc.net

[알고리즘설계]

최소한이 점프 횟수로 도착해야 되므로, 우리는 점프 길이를 최대한 늘려야 합니다.

하지만, 마지막 점프는 다시 점프 길이 1로 돌아와야 되므로 점프해야 되는 길이 L이 주어졌을 때,

1 2 3 ⋯ N N-1 N-2 ⋯ 1 의 합이 L보다 작은 최대 N을 구해야 됩니다.

등차수열 합 공식을 이용해 보면 1 2 3 ⋯ N N-1 N-2 ⋯ 1 의 합은 N^2이 됩니다.

이때, 남은 L - N^2는 1 2 3 ⋯ N 으로 올라가는 과정에서 1 ~ N 길이의 점프가 다 가능하므로

가장 큰 N부터 점프 횟수를 추가해가며 남은 길이를 처리할 수 있습니다.

#include<iostream>

using namespace std;

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(0);

	int t;
	cin >> t;
	for (int i = 0; i < t; i++) {
		long long x, y, length, point, count = 0;
		cin >> x >> y;
		length = y - x;
		if (length <= 3) {
			cout << length << '\n';
			continue;
		}
		for (point = 2; ; point++) {
			if (point * point > length) {
				point--;
				break;
			}
		}

		length -= point * point;
		count += 2 * point - 1;
		while (length != 0) {
			count += (length / point);
			length -= (length / point) * point;
			point--;
		}
		cout << count << '\n';
	}
}

열심히 공부하고 노력하고 있는 꿈 많은 예비 개발자입니다.

혼자서 공부한 내용을 정리하고 포스팅하다 보니 틀린 내용이 있을 수도 있습니다.

많은 조언과 가르침 주실 분은 댓글로 자유롭게 남겨주셔도 좋을 것 같습니다! 

감사합니다.

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ] 1002 - 터렛  (0) 2019.08.21
[BOJ] 17174 - 전체 계산 횟수  (0) 2019.08.21
[BOJ] 1436 - 영화감독 숌  (0) 2019.08.21
[BOJ] 2456 - 나는 학습회장이다.  (0) 2019.08.21
[BOJ] 2579 - 계단 오르기  (0) 2019.08.21

안녕하세요.

여행벌입니다.

문제만 보면 되게 어려워보이지만, Input이 작고 시간이 넉넉해서 무식하게 구현해도되는 문제입니다.


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

 

1436번: 영화감독 숌

666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다. 하지만 숌은 자신이 조

www.acmicpc.net

[알고리즘설계]

N번 째 숫자를 찾을때까지 666부터 무식하게 찾아본다.

#include<iostream>
#include<string>
using namespace std;

int main(void) {
	int ninput;
	bool flag = false;
	string temp;
	cin >> ninput;
	for (long long i = 666; ; i++) {
		flag = false;
		temp = to_string(i);
		for (int j = 0; j < temp.length() - 2; j++) {
			if (temp[j] == '6' && temp[j + 1] == '6' && temp[j + 2] == '6'){
				flag = true;
				break;
			}
		}
		if (flag)
			ninput--;
		if (ninput == 0){
			cout << i;
			break;
		}
	}
}

열심히 공부하고 노력하고 있는 꿈 많은 예비 개발자입니다.

혼자서 공부한 내용을 정리하고 포스팅하다 보니 틀린 내용이 있을 수도 있습니다.

많은 조언과 가르침 주실 분은 댓글로 자유롭게 남겨주셔도 좋을 것 같습니다! 

감사합니다.

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ] 17174 - 전체 계산 횟수  (0) 2019.08.21
[BOJ] 1101 - Fly me to the Alpha Centauri  (0) 2019.08.21
[BOJ] 2456 - 나는 학습회장이다.  (0) 2019.08.21
[BOJ] 2579 - 계단 오르기  (0) 2019.08.21
[BOJ] 6603 - LOTTO  (0) 2019.08.21

+ Recent posts