본문 바로가기
IT 이야기/알고리즘

좌표 평면 2차원 배열로 표현 알고리즘 C++ / JAVA / 파이썬

by youngmap 2023. 1. 20.
반응형

백준 2663번 색종이 문제를 풀면서 좌표 평면을 2차원 배열로 어떻게 표현하는지 알고리즘 공부를 해봅시다.

 

 

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

 

2563번: 색종이

가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록

www.acmicpc.net

 

 

문제를 보면 가로 세로 크기가 100밖에 안되는 아주 작은 좌표 평면입니다.

그렇다면 2차원 배열을 int[100][100] 선언하면 되는 간단한 문제입니다.

가로세로 길이가 10인 정사각형 색종이가 나올때마다 검은 영역을 1로 만들어줍니다.

최종적으로 1인 영역을 카운팅하면 넓이가 구해집니다.

 

1. JAVA

2차원 배열을 선언하고 색종이 넓이를 구하기 위해 해당 배열에 1을 저장합니다.

그리고 답을 바로 구하기 위해 ans 변수를 1 더합니다.

중복 계산을 막기위해 값이 0일 때만 넓이를 계산합니다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	public static int[][] P = new int[100][100];
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int n = Integer.parseInt(st.nextToken());
		
		int ans = 0;
		for(int i = 0; i < n; i++) {
			st = new StringTokenizer(br.readLine());
			int x = Integer.parseInt(st.nextToken());
			int y = Integer.parseInt(st.nextToken());

			for(int j = 0; j < 10; j++) {
				for(int k = 0; k < 10; k++) {
					if(P[x+j][y+k] == 0) {
						P[x+j][y+k] = 1;
						ans++;
					}
				}
			}
		}
		System.out.println(ans);
	}
}

 

2. C++

#include <iostream>
using namespace std;

int P[100][100];

int main() {
    int n = 0;
	cin >> n;
	
	int ans = 0;
	
	for (int i = 0; i < n; i++) {
		int x, y;
		cin >> x >> y;
		
		for (int j = 0; j < 10; j++) {
			for (int k = 0; k < 10; k++) {
				if(P[x+j][y+k] == 0){
					P[x+j][y+k] = 1;
					ans++;
				}
			}
		}
	}
	cout << ans;
}

 

3. Python 파이썬

파이썬은 증감연산자 "++", "--" 가 없습니다.

전위 후위 증감 연산자 "a++", "++a", "--a", "a--" 사용은 예상치 못한 오류 가능성과 디버깅의 어려움이 있어서 

파이썬의 철학상 맞지 않기 때문으로 생각됩니다.

따라서 암시적인 ++ 연산자 대신 명시적인 += 연산자를 사용합니다.

P = [[0 for _ in range(100)] for _ in range(100)]

n = int(input())

ans = 0

for i in range(n):
    x, y = map(int, input().split())
    for j in range(10):
        for k in range(10):
            if P[x+j][y+k] == 0:
                P[x+j][y+k] = 1
                ans += 1
print(ans)

 

반응형