문제
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번
- 문제를 번역한 사람: baekjoon
#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분면으로 나누었을 때 좌표가 해당하는 값을 찾으라고 했으면 많이 어려웠을 것 같습니다.
이런 식으로 기존에 출제되었던 문제를 어떻게 하면 더 꼬아서 낼 수 있는지 생각해보시면서 코딩 테스트를 준비하신다면 정말 좋은 결과가 기다리고 있을 것 같습니다!
이상입니다!