πŸ’  Cpp/[BOJ] λ‹¨κ³„λ³„λ‘œ 풀어보기

[BOJ][C++] λ°±μ€€ 9063번: λŒ€μ§€ (Bronze III)

선달 2024. 12. 27. 19:21
λ°˜μ‘ν˜•

문제

μž„μ”¨λŠ” 1950 λ…„ ν•œκ΅­μ „μŸμœΌλ‘œ λ§Žμ€ 손해λ₯Ό λ³Έ μ‚¬λžŒλ“€ 쀑 ν•˜λ‚˜λ‹€. μ „μŸ 톡에 손해보지 μ•Šμ€ μ‚¬λžŒμ΄ μ–΄λ”” μžˆμ„κΉŒ λ§Œμ€ κ·ΈλŠ” 6.25 κ°€ μΌμ–΄λ‚˜κΈ° μ „λ§Œ 해도 좩청도 지방에 넓은 λŒ€μ§€λ₯Ό μ†Œμœ ν•œ 큰 λΆ€μžμ˜€λ‹€. μ „μŸμ΄ λ‚˜μž μž„μ”¨λŠ” λ•…λ¬Έμ„œμ™€ κ°’ λ‚˜κ°€λŠ” κ²ƒλ“€λ§Œ μ±™κ²¨μ„œ 일본으둜 ν”Όλ‚œμ„ κ°€μ§€λ§Œ ν”Όλ‚œ 쀑에 그만 λ•…λ¬Έμ„œλ₯Ό μžƒμ–΄λ²„λ¦¬κ³  λ§Œλ‹€. μ „μŸμ΄ λλ‚œ 후에 μž„μ”¨μ˜ 땅은 이미 λ‹€λ₯Έ μ‚¬λžŒλ“€μ˜ 논밭이 λ˜μ–΄ μžˆμ—ˆκ³ , μž„μ”¨λŠ” 땅을 되찾으렀 ν–ˆμ§€λ§Œ λ¬Έμ„œκ°€ μ—†μœΌλ‹ˆ 생떼 μ“°λŠ” 것과 λ‹€λ₯Ό λ°” μ—†μ—ˆλ‹€. μ΄λŸ¬λ‹€κ°€ μž„μ”¨λŠ” κΈΈλ°”λ‹₯에 λ‚˜μ•‰κ²Œ 생겼닀.
μ΄λ•Œ, μž„μ”¨μ—κ²Œ 쒋은 생각이 λ– μ˜¬λžμœΌλ‹ˆ λ°”λ‘œ μžμ‹ μ΄ μŠ΅κ΄€μ²˜λŸΌ λ•… κΉŠμˆ™μ΄ λ­”κ°€ ν‘œμ‹μ„ ν•΄λ†“μ•˜λ˜ 사싀이닀. μž„μ”¨λŠ” ν•œμ ν•  λ•Œλ§ˆλ‹€ μžμ‹ μ˜ 논밭을 거닐닀가 땅속 κΉŠμ€ 곳에 μžμ‹ μ˜ 이름이 μ”Œμ–΄μ§„ μ˜₯κ΅¬μŠ¬μ„ λ¬»μ–΄λ†“μ•˜λ˜ 것이닀. 즉, μ–΄λ–€ μ§€μ μ—μ„œ 그의 이름이 적힌 μ˜₯ꡬ슬이 λ‚˜μ˜¨λ‹€λ©΄ κ·Έ 지점은 μ˜ˆμ „μ— μž„μ”¨μ˜ λ•…μ΄μ—ˆλ‹€λŠ” 것을 증λͺ…ν•˜λŠ” 것이닀.
μž„μ”¨λŠ” μ¦‰μ‹œ λ―Όμ‚¬μ†Œμ†‘μ„ 톡해 μžμ‹ μ˜ 땅을 찾고자 ν–ˆκ³  논리적인 κ·Όκ±°λ₯Ό λ“€μ–΄ μ˜₯ꡬ슬이 λ‚˜μ˜€λŠ” 지점이 μ›λž˜ μžμ‹ μ˜ λ•…μ˜ ν•œ μ§€μ μ΄μ—ˆλ‹€λŠ” 것을 μ£Όμž₯ν•˜μ—¬ κ²°κ΅­ λ‹΄λ‹ΉνŒμ‚¬λ₯Ό μ„€λ“ν•˜λŠ” 데에 μ„±κ³΅ν•˜μ˜€λ‹€. λ‹΄λ‹ΉνŒμ‚¬λŠ” λ‹€μŒκ³Ό 같은 νŒκ²°μ„ λ‚΄λ Έλ‹€. “ 6.25 μ΄μ „μ˜ κ°œμΈμ†Œμœ  λŒ€μ§€λ“€μ€ 99%κ°€ 남뢁, λ™μ„œ λ°©ν–₯으둜 ν‰ν–‰ν•œ μ§μ‚¬κ°ν˜• λͺ¨μ–‘μ΄μ—ˆμœΌλ―€λ‘œ, μž„μ”¨μ˜ 이름이 μƒˆκ²¨μ§„ μ˜₯ꡬ슬이 λ‚˜μ˜€λŠ” λͺ¨λ“  지점을 ν¬ν•¨ν•˜λŠ” κ°€μž₯ μž‘μ€ 남뢁, λ™μ„œ λ°©ν–₯으둜 ν‰ν–‰ν•œ 변을 κ°–λŠ” μ§μ‚¬κ°ν˜•μ˜ λŒ€μ§€λ₯Ό μž„μ”¨μ˜ μ†Œμœ λ‘œ μΈμ •ν•œλ‹€.” μž„μ”¨λŠ” λ§Žμ€ 손해λ₯Ό λ³΄λŠ” μ…ˆμ΄μ§€λ§Œ 더 이상을 μš”κ΅¬ν•  λ§Œν•œ κ·Όκ±°κ°€ μ—†μ—ˆκΈ° λ•Œλ¬Έμ— 이 νŒκ²°μ„ λ”°λ₯΄κΈ°λ‘œ ν–ˆλ‹€.
μž„μ”¨μ˜ 이름이 μƒˆκ²¨μ§„ μ˜₯ꡬ슬의 μœ„μΉ˜ N κ°œκ°€ μ£Όμ–΄μ§ˆ λ•Œμ—, μž„μ”¨μ—κ²Œ λŒμ•„κ°ˆ λŒ€μ§€μ˜ 넓이λ₯Ό κ³„μ‚°ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. 단, μ˜₯ꡬ슬의 μœ„μΉ˜λŠ” 2 차원 μ •μˆ˜ μ’Œν‘œλ‘œ 주어지고 μ˜₯κ΅¬μŠ¬μ€ 같은 μœ„μΉ˜μ— μ—¬λŸ¬ κ°œκ°€ 발견될 μˆ˜λ„ 있으며, x μΆ•μ˜ μ–‘μ˜λ°©ν–₯을 동μͺ½, y μΆ•μ˜ μ–‘μ˜λ°©ν–₯을 뢁μͺ½μ΄λΌκ³  κ°€μ •ν•œλ‹€.

예λ₯Ό λ“€μ–΄ μœ„μ™€ 같이 (2, 1), (3, 2), (5, 2), (3, 4) λ„€ μ μ—μ„œ μ˜₯κ΅¬μŠ¬μ„ λ°œκ²¬ν•˜μ˜€λ‹€λ©΄, μž„μ”¨μ—κ²Œ λŒμ•„κ°ˆ λŒ€μ§€λŠ” (2, 1), (5, 1), (2, 4), (5, 4)λ₯Ό λ„€ κΌ­μ§“μ μœΌλ‘œ ν•˜λŠ” μ§μ‚¬κ°ν˜•μ΄λ©°, λ„“μ΄λŠ” (5 - 2) × (4 - 1) = 9 κ°€ λœλ‹€.

μž…λ ₯

첫째 μ€„μ—λŠ” 점의 개수 N (1 ≤ N ≤ 100,000) 이 주어진닀. μ΄μ–΄μ§€λŠ” N μ€„μ—λŠ” 각 점의 μ’Œν‘œκ°€ 두 개의 μ •μˆ˜λ‘œ ν•œ 쀄에 ν•˜λ‚˜μ”© 주어진닀. 각각의 μ’Œν‘œλŠ” -10,000 이상 10,000 μ΄ν•˜μ˜ μ •μˆ˜μ΄λ‹€.

좜λ ₯

첫째 쀄에 N 개의 점을 λ‘˜λŸ¬μ‹ΈλŠ” μ΅œμ†Œ 크기의 μ§μ‚¬κ°ν˜•μ˜ 넓이λ₯Ό 좜λ ₯ν•˜μ‹œμ˜€.

 

풀이

// 풀이 : https://whkakrkr.tistory.com

#include <iostream>
#include <vector>

using namespace std;

const int INF = 100001;

int main() {
    ios_base::sync_with_stdio(false);
	cout.tie(NULL);
	cin.tie(NULL);
	
	int n;
	cin >> n;
	int max_x=-1*INF, max_y=-1*INF, min_x=INF, min_y=INF;
	int x,y;
	for(int i=0; i<n; i++) {
	    cin >> x >> y;
	    max_x = max(x, max_x);
	    min_x = min(x, min_x);
	    max_y = max(y, max_y);
	    min_y = min(y, min_y);
	}
	
	int width = max_x + min_x*-1;
	int height = max_y + min_y*-1;
	cout << width*height;
	
    return 0;
}
λ°˜μ‘ν˜•