문제

흔한 수학 문제 중 하나는 주어진 점이 어느 사분면에 속하는지 알아내는 것이다. 사분면은 아래 그림처럼 1부터 4까지 번호를 갖는다. "Quadrant n"은 "제n사분면"이라는 뜻이다.

예를 들어, 좌표가 (12, 5)인 점 A는 x좌표와 y좌표가 모두 양수이므로 제1사분면에 속한다. 점 B는 x좌표가 음수이고 y좌표가 양수이므로 제2사분면에 속한다.

점의 좌표를 입력받아 그 점이 어느 사분면에 속하는지 알아내는 프로그램을 작성하시오. 단, x좌표와 y좌표는 모두 양수나 음수라고 가정한다.

 

입력

첫 줄에는 정수 x가 주어진다. (−1000 ≤ x ≤ 1000; x ≠ 0) 다음 줄에는 정수 y가 주어진다. (−1000 ≤ y ≤ 1000; y ≠ 0)

 

출력

점 (x, y)의 사분면 번호(1, 2, 3, 4 중 하나)를 출력한다.

 

풀이

한동안 본 적 없는 사분면이 갑자기 나와서 처음엔 당황했는데, 각 좌표의 양/음 여부만 보고 판단해주면 되기 때문에 쉬운 문제

x, y좌표 모두 0이 아닌 정수라고 가정하고 있기 때문에, 단순하게 양수인지 음수인지 여부만 판별해주면 된다.

 

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.Scanner;
 
public class Main{
    public static void main(String[] args) {
    
        Scanner ip = new Scanner(System.in);
        
        int x = ip.nextInt();
        int y = ip.nextInt();
        ip.close();
        
        int quadrant;
        
        if (x>0 && y >0) quadrant = 1;
        else if (x<0 && y>0) quadrant = 2;
        else if (x<0 && y<0) quadrant = 3;
        else quadrant = 4;
        
        System.out.println(quadrant);
 
    }
}
cs

 

문제

연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오.

윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.

예를 들어, 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다. 1900년은 100의 배수이고 400의 배수는 아니기 때문에 윤년이 아니다. 하지만, 2000년은 400의 배수이기 때문에 윤년이다.

 

입력

첫째 줄에 연도가 주어진다. 연도는 1보다 크거나 같고, 4000보다 작거나 같은 자연수이다.

 

출력

첫째 줄에 윤년이면 1, 아니면 0을 출력한다.

 

풀이

윤년 계산하는 게 생각보다 까다로우면서 단순하다

프로그래밍을 C로 처음 접했는데, 그 당시에는 윤년 코드 자체도 이해가 안돼서 한참을 들여다 보고 있었는데 .. 

지금은 또 금방 풀어내니까 공부를 하긴 했구나 하는 생각이 (?) 든다

 

크게 봐야 할 조건은 2개

1) 연도가 4의 배수이면서 100의 배수가 아닐 때

2) 또는 연도가 400의 배수일 때

 

( 연도가 4의 배수 && 100의 배수가 아닐 때) || (연도가 400의 배수일 때) 로 설정해주면 된다.

 

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.Scanner;
 
public class Main{
    public static void main(String[] args) {
    
        Scanner ip = new Scanner(System.in);
        
        int year = ip.nextInt();
        ip.close();
        
        if ((year%4==0 && year%100 != 0|| (year%400 == 0)) System.out.println(1);
        else System.out.println(0);
 
    }
}
cs

 

문제

시험 점수를 입력받아 90 ~ 100점은 A, 80 ~ 89점은 B, 70 ~ 79점은 C, 60 ~ 69점은 D, 나머지 점수는 F를 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄에 시험 점수가 주어진다. 시험 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

 

출력

시험 성적을 출력한다.

 

풀이

처음에는 swtich case 구문이 생각났는데, 문제 분류가 if 쪽이라 우선은 if문으로 해결했다

 

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;
 
public class Main{
    public static void main(String[] args) {
    
        Scanner ip = new Scanner(System.in);
        
        int score = ip.nextInt();
        char grade;
        ip.close();
        
        if (score >=90 && score <= 100) grade = 'A';
        else if (score >=80 && score <= 89) grade = 'B';
        else if (score >=70 && score <= 79) grade = 'C';
        else if (score >=60 && score <= 69) grade = 'D';
        else grade = 'F';
        
        System.out.println(grade);
    }
}
cs

 

문제

두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오.

 

입력

첫째 줄에 A와 B가 주어진다. A와 B는 공백 한 칸으로 구분되어져 있다.

 

출력

첫째 줄에 다음 세 가지 중 하나를 출력한다.

  • A가 B보다 큰 경우에는 '>'를 출력한다.

  • A가 B보다 작은 경우에는 '<'를 출력한다.

  • A와 B가 같은 경우에는 '=='를 출력한다.

풀이

단순하게 if문으로 작성하면 되는 간단한 문제

 

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.Scanner;
 
public class Main{
    public static void main(String[] args) {
    
        Scanner ip = new Scanner(System.in);
        
        int A = ip.nextInt();
        int B = ip.nextInt();
        
        ip.close();
        
        if (A>B) System.out.println('>');
        else if (A<B) System.out.println('<');
        else if (A==B) System.out.println("==");
        
    }
}
cs

 

'프로그래밍 > JAVA' 카테고리의 다른 글

acmicpc(baekjoon) 2753 - 윤년  (0) 2021.02.08
acmicpc(baekjoon) 9488 - 시험 성적  (0) 2021.02.08
acmicpc(baekjoon) 2588 - 곱셈  (0) 2021.02.08
acmicpc(baekjoon) 10430 - 나머지  (0) 2021.01.24
acmicpc(baekjoon) 10869 - 사칙연산  (0) 2021.01.24

문제

(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.

(1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 (1)의 위치에 들어갈 세 자리 자연수가, 둘째 줄에 (2)의 위치에 들어갈 세자리 자연수가 주어진다.

 

출력

첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.

 

풀이

막상 생각하면 쉬운데, 순간적으로 봤을 땐 어 ? 했던 문제

(1)의 숫자를 (2)의 숫자 한 자리씩과 각각 곱해서 중간 결과 (3~5)를 도출한 다음, 중간 결과를 더하면 된다

 

주의해야 할 점은, 

1) 중간 결과 도출 시 (2)번 숫자 한 자리씩 구해서 (1)과 연산해야 한다

2) 중간 결과를 무작정 더하면 안 되고, 자리가 한 자리씩 밀리는 걸 고려해야 한다

 

정도이다.

 

1) 번의 경우 각각의 숫자 자리수를 구하는 방법은

100의 자리 number / 100
10의 자리 ( number % 100 ) / 10
1의 자리 number % 10

100의 자리의 경우에는 단순하게 100으로 나눈 몫을 취하면 되고, 

10의 자리에서는 100으로 나눈 나머지 (123 % 10을 하면 23이 된다) 에서 10으로 나눈 몫을 취하면 된다.

1의 자리는 10으로 나눈 나머지를 취하면 된다.

 

 

2) 번의 경우, 중간 결과 (3 - 5)를 구한 후에 10, 100을 곱해주면 간단하게 해결할 수 있다.

즉 (3)이 2360, (4)가 3776, (5)가 1416인 문제 예시에서, (4)*10, (5)*100을 해 주면

2360 + 37760 + 141600 이 되므로 계산할 때 자리수 고려 없이 (3) + (4) + (5)를 해 주면 된다.

 

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Scanner;
 
public class Main{
    public static void main(String[] args) {
        
        Scanner ip = new Scanner(System.in);
        
        int num_1 = ip.nextInt();
        int num_2 = ip.nextInt();
        
        ip.close();
        int a = num_1 * (num_2 % 10);
        int b = num_1 * ((num_2 % 100)/10);
        int c = num_1 * (num_2 /100);
                
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(a+(b*10)+(c*100));
    }
}
cs

 

+ Recent posts