본문 바로가기

# 프로그래밍 개발/04. 알고리즘 문제풀이

백준 알고리즘 9610번 [사분면] 문제풀이코드 공개

반응형

백준 알고리즘 문제 풀이코드 공개 배너 이미지 9610번 4분면

 

문제

2차원 좌표 상의 여러 점의 좌표 (x,y)가 주어졌을 때, 각 사분면과 축에 점이 몇 개 있는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 점의 개수 n (1 ≤ n ≤ 1000)이 주어진다. 다음 n개 줄에는 점의 좌표 (xi, yi)가 주어진다. (-106 ≤ xi, yi ≤ 106)

출력

각 사분면과 축에 점이 몇 개 있는지를 예제 출력과 같은 형식으로 출력한다.

예제 입력과 예제 출력을 표시하는 이미지

출처

ICPC > Regionals > Asia Pacific > Thailand > 2013 ACM-ICPC Asia Phuket Regional Programming Contest PB번

알고리즘 분류

제출한 코드의 정답 여부를 나타내는 이미지

#include<stdio.h>
#include<stdlib.h>
int main(){
	int n;
	scanf("%d",&n);
	int **arr = (int**)malloc(sizeof(int*)*n);
	int q[5] = {0};
	for(int i = 0 ; i < n ; i++){
		arr[i] = (int*)malloc(sizeof(int)*2);
		scanf("%d %d",&arr[i][0],&arr[i][1]);
		int a = arr[i][0];
		int b = arr[i][1];
		if(a == 0 || b == 0){
			q[4]++;
		}else if(a>0 && b>0)
			q[0]++;
		else if(a<0 && b>0)
			q[1]++;
		else if(a<0 && b<0)
			q[2]++;
		else
			q[3]++;
		
	}
	printf("Q1: %d\n",q[0]);
	printf("Q2: %d\n",q[1]);
	printf("Q3: %d\n",q[2]);
	printf("Q4: %d\n",q[3]);
	printf("AXIS: %d\n",q[4]);
}

코드 길이 혹은 메모리 제한 문제를 피하기 위해서 malloc() 함수를 사용하던 옛날이 떠오르네요 

지금은 이런걸 사용하지 않아도 자동적으로 사이즈를 할당하고 반환해주니 얼마나 좋은 코딩시대가 되었는지 모르겠습니다. 이 문제 역시 수학과 구현문제인데요. 모든 사람이 말하는 수학과 구현문제 풀이 방식은 손으로 직접 풀어보고 규칙을 깨우친 뒤 이를 코드로 작성하는 것이 가장 효과적으로 문제를 풀어낼 수 있는 방법입니다. 괜히 규칙도 찾지 못 하고 코드부터 작성하다가는 큰 코를 다칠 수 있기 때문에 조심하셔야 합니다. 

하지만 이 문제는 그렇게 어려운 문제는 아니었기 때문에 괜찮아 보이는데요. 하지만 만일 문제가 4분면으로 딱 잘라 나눠지는 것이 아니라 2차원 방정식을 이용해 4분면을 나누고 혹은 2분면 혹은 6분면으로 나누었을 때 좌표가 해당하는 값을 찾으라고 했으면 많이 어려웠을 것 같습니다. 

이런 식으로 기존에 출제되었던 문제를 어떻게 하면 더 꼬아서 낼 수 있는지 생각해보시면서 코딩 테스트를 준비하신다면 정말 좋은 결과가 기다리고 있을 것 같습니다! 

이상입니다! 

반응형