안녕하세요.

여행벌입니다.


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

 

1012번: 유기농 배추

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추흰지렁이를 구입하기로 결심한다. 이 지렁이는 배추근처에 서식하며 해충을 잡아 먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추흰지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다. (

www.acmicpc.net

[알고리즘설계]

BFS 탐색을 하면서 탐색한 공간은 2로 바꿔주고, BFS탐색을 시행한 횟수를 출력합니다.

#include<iostream>
#include<queue>

using namespace std;

int map[50][50];
void BFS(int, int,int, int);

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

	int t;
	cin >> t;
	while (t--) {
		for (int i = 0; i < 50; i++)
			for (int j = 0; j < 50; j++)
				map[i][j] = 0;
		int row, column, k, x, y, count = 0;
		cin >> row >> column >> k;
		for (int i = 0; i < k; i++) {
			cin >> x >> y;
			map[x][y] = 1;
		}
		for (int i = 0; i < row; i++) {
			for (int j = 0; j < column; j++) {
				if (map[i][j] == 1){
					BFS(i, j, row, column);
					count++;
				}
			}
		}
		cout << count << '\n';
	}
}

void BFS(int i, int j, int row, int column) {
	int x_dir[4] = { -1, 0, 1, 0 };
	int y_dir[4] = { 0, 1 , 0 , -1 };
	queue<int> x;
	queue<int> y;
	x.push(i);
	y.push(j);
	map[i][j] = 2;
	while (!x.empty()) {
		int x1 = x.front();
		int y1 = y.front();
		x.pop(), y.pop();
		for (int k = 0; k < 4; k++) {
			int next_x = x1 + x_dir[k];
			int next_y = y1 + y_dir[k];
			if (0 <= next_x && next_x < row && 0 <= next_y && next_y < column && map[next_x][next_y] == 1) {
				x.push(next_x);
				y.push(next_y);
				map[next_x][next_y] = 2;
			}
		}
	}
	return;
}

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

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

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

감사합니다.

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

[BOJ] 1003 - 피보나치 함수  (0) 2019.08.22
[BOJ] 1697 - Catch That Cow  (0) 2019.08.21
[BOJ] 1009 - 분산처리  (0) 2019.08.21
[BOJ] 1002 - 터렛  (0) 2019.08.21
[BOJ] 17174 - 전체 계산 횟수  (0) 2019.08.21

안녕하세요.

여행벌입니다.


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

 

1009번: 분산처리

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000)

www.acmicpc.net

[알고리즘설계]

단순 구현 문제입니다.

#include<iostream>

int main(void) {
	int test_case;
	std::cin >> test_case;
	while (test_case) {
		int a, b, answer = 1;
		std::cin >> a >> b;
		for (int i = 0; i < b; i++)
			answer = answer * a % 10;
		if (answer == 0)
			std::cout << 10 << '\n';
		else
			std::cout << answer << '\n';
		test_case--;
	}
}

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

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

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

감사합니다.

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

[BOJ] 1697 - Catch That Cow  (0) 2019.08.21
[BOJ] 1012 - 유기농 배추  (0) 2019.08.21
[BOJ] 1002 - 터렛  (0) 2019.08.21
[BOJ] 17174 - 전체 계산 횟수  (0) 2019.08.21
[BOJ] 1101 - Fly me to the Alpha Centauri  (0) 2019.08.21

안녕하세요.

여행벌입니다.


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

+ Recent posts