문제
2차원 좌표 상의 여러 점의 좌표 (x,y)가 주어졌을 때, 각 사분면과 축에 점이 몇 개 있는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 점의 개수 n (1 ≤ n ≤ 1000)이 주어진다. 다음 n개 줄에는 점의 좌표 (xi, yi)가 주어진다. (-106 ≤ xi, yi ≤ 106)
출력
각 사분면과 축에 점이 몇 개 있는지를 예제 출력과 같은 형식으로 출력한다.
예제 입력 1
5
0 0
0 1
1 1
3 -3
2 2
예제 출력 1
Q1: 2
Q2: 0
Q3: 0
Q4: 1
AXIS: 2
예상 풀이 방법
n을 입력받아 0부터 0 미만까지의 for문을 돌린다.
거기서 n번만큼 scanf로 x, y값을 받고
if문을 여러번 써서 걸러준다.
가장 먼저 x나 y가 0일 경우 AXIS의 갯수를 세어주도록 하고
x가 양수일 때 2가지
x가 음수일 때 2가지를 각각 나눈다.
그리고 맨 아래에 scanf로 출력
1차 코드
#include <stdio.h>
int main() {
int AXIS = 0;
int Q1 = 0;
int Q2 = 0;
int Q3 = 0;
int Q4 = 0;
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int x, y;
scanf("%d %d", &x, &y);
if (x == 0 || y == 0) {
AXIS++;
}
if (x > 0) {
if (y > 0) {
Q1++;
}
if (y < 0) {
Q4++;
}
}
if (x < 0) {
if (y > 0) {
Q2++;
}
if (y < 0) {
Q3++;
}
}
}
printf("Q1: %d\n", Q1);
printf("Q2: %d\n", Q2);
printf("Q3: %d\n", Q3);
printf("Q4: %d\n", Q4);
printf("AXIS: %d\n", AXIS);
}
1차 실행 결과
5
0 0
0 1
1 1
3 -3
2 2
Q1: 2
Q2: 0
Q3: 0
Q4: 1
AXIS: 2
백준 채점 결과

미흡했던 점
return 0; 안들어가있는데 이거 습관화가 안되어있다.
개선 방안
코드를 더 줄이는 방법으로 할 수 있을 것 같다.
최종 코드
#include <stdio.h>
int main() {
int AXIS = 0;
int Q1 = 0;
int Q2 = 0;
int Q3 = 0;
int Q4 = 0;
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int x, y;
scanf("%d %d", &x, &y);
if (x == 0 || y == 0) {
AXIS++;
}
if (x > 0) {
if (y > 0) {
Q1++;
}
if (y < 0) {
Q4++;
}
}
if (x < 0) {
if (y > 0) {
Q2++;
}
if (y < 0) {
Q3++;
}
}
}
printf("Q1: %d\nQ2: %d\nQ3: %d\nQ4: %d\nAXIS: %d\n", Q1, Q2, Q3, Q4, AXIS);
return 0;
}
'C > BaekJoon' 카테고리의 다른 글
[C] 백준 10798 - 세로읽기 | BaekJoon (0) | 2023.08.04 |
---|---|
[C] 백준 10250 - ACM호텔 | BaekJoon (0) | 2023.08.03 |
[C] 백준 2748 - 피보나치 수2 | BaekJoon (0) | 2023.08.02 |
[C] 백준 2747 - 피보나치 수 | BaekJoon (0) | 2023.08.02 |
[C] 백준 1977 - 완전제곱수 | BaekJoon (0) | 2023.08.01 |
문제
2차원 좌표 상의 여러 점의 좌표 (x,y)가 주어졌을 때, 각 사분면과 축에 점이 몇 개 있는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 점의 개수 n (1 ≤ n ≤ 1000)이 주어진다. 다음 n개 줄에는 점의 좌표 (xi, yi)가 주어진다. (-106 ≤ xi, yi ≤ 106)
출력
각 사분면과 축에 점이 몇 개 있는지를 예제 출력과 같은 형식으로 출력한다.
예제 입력 1
5
0 0
0 1
1 1
3 -3
2 2
예제 출력 1
Q1: 2
Q2: 0
Q3: 0
Q4: 1
AXIS: 2
예상 풀이 방법
n을 입력받아 0부터 0 미만까지의 for문을 돌린다.
거기서 n번만큼 scanf로 x, y값을 받고
if문을 여러번 써서 걸러준다.
가장 먼저 x나 y가 0일 경우 AXIS의 갯수를 세어주도록 하고
x가 양수일 때 2가지
x가 음수일 때 2가지를 각각 나눈다.
그리고 맨 아래에 scanf로 출력
1차 코드
#include <stdio.h>
int main() {
int AXIS = 0;
int Q1 = 0;
int Q2 = 0;
int Q3 = 0;
int Q4 = 0;
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int x, y;
scanf("%d %d", &x, &y);
if (x == 0 || y == 0) {
AXIS++;
}
if (x > 0) {
if (y > 0) {
Q1++;
}
if (y < 0) {
Q4++;
}
}
if (x < 0) {
if (y > 0) {
Q2++;
}
if (y < 0) {
Q3++;
}
}
}
printf("Q1: %d\n", Q1);
printf("Q2: %d\n", Q2);
printf("Q3: %d\n", Q3);
printf("Q4: %d\n", Q4);
printf("AXIS: %d\n", AXIS);
}
1차 실행 결과
5
0 0
0 1
1 1
3 -3
2 2
Q1: 2
Q2: 0
Q3: 0
Q4: 1
AXIS: 2
백준 채점 결과

미흡했던 점
return 0; 안들어가있는데 이거 습관화가 안되어있다.
개선 방안
코드를 더 줄이는 방법으로 할 수 있을 것 같다.
최종 코드
#include <stdio.h>
int main() {
int AXIS = 0;
int Q1 = 0;
int Q2 = 0;
int Q3 = 0;
int Q4 = 0;
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int x, y;
scanf("%d %d", &x, &y);
if (x == 0 || y == 0) {
AXIS++;
}
if (x > 0) {
if (y > 0) {
Q1++;
}
if (y < 0) {
Q4++;
}
}
if (x < 0) {
if (y > 0) {
Q2++;
}
if (y < 0) {
Q3++;
}
}
}
printf("Q1: %d\nQ2: %d\nQ3: %d\nQ4: %d\nAXIS: %d\n", Q1, Q2, Q3, Q4, AXIS);
return 0;
}
'C > BaekJoon' 카테고리의 다른 글
[C] 백준 10798 - 세로읽기 | BaekJoon (0) | 2023.08.04 |
---|---|
[C] 백준 10250 - ACM호텔 | BaekJoon (0) | 2023.08.03 |
[C] 백준 2748 - 피보나치 수2 | BaekJoon (0) | 2023.08.02 |
[C] 백준 2747 - 피보나치 수 | BaekJoon (0) | 2023.08.02 |
[C] 백준 1977 - 완전제곱수 | BaekJoon (0) | 2023.08.01 |