문제

연도가 주어졌을 때, 윤년이면 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

 

문제

두 정수 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

 

 

입출력 부분을 여러 번 다뤄서 그런지 순조롭게 풀렸던 문제

타입도 별도로 고려하지 않아도 된다.

 


import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		int A = scan.nextInt();
		int B = scan.nextInt();
		int C = scan.nextInt();
		
		scan.close();
		
		System.out.println((A+B)%C);
		System.out.println(((A%C)+(B%C))%C);
		System.out.println((A*B)%C);
		System.out.println(((A%C)*(B%C))%C);
		
	}
}

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

acmicpc(baekjoon) 1330 - 두 수 비교하기  (0) 2021.02.08
acmicpc(baekjoon) 2588 - 곱셈  (0) 2021.02.08
acmicpc(baekjoon) 10869 - 사칙연산  (0) 2021.01.24
acmicpc(baekjoon) 1008 - A/B  (0) 2021.01.23
acmicpc(baekjoon) 10998 - AxB  (0) 2021.01.23

 

앞에서 풀었던 +, -, *, / 문제에 나머지 연산까지 결합한 문제

처음에 완전히 바보같은 짓을 했다.

 

당연히 A/B 결과가 정수형이 아닐 거라 생각하고, A/(double)B로 제출했는데 계속 틀렸다고 했다.

 

덕분에 다른 분들이 풀어놓은 소스도 찾아봤는데, 아무리 봐도 다른 점이 없었다 .. 

새롭게 알게된 건 있다. 

평소에 쓰던 Scanner를 사용하고 나서는 .close()를 해 줘야 한다...!

 

그래서 찾아보니 형변환이 없었고, 출력 예시를 보니 정수형이었다. ...

 


 

< 풀이 >

import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		int A = scan.nextInt();
		int B = scan.nextInt();
        
		System.out.println(A+B);
		System.out.println(A-B);
		System.out.println(A*B);
		System.out.println(A/B);
		System.out.println(A%B);
	}
}

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

acmicpc(baekjoon) 2588 - 곱셈  (0) 2021.02.08
acmicpc(baekjoon) 10430 - 나머지  (0) 2021.01.24
acmicpc(baekjoon) 1008 - A/B  (0) 2021.01.23
acmicpc(baekjoon) 10998 - AxB  (0) 2021.01.23
acmicpc(baekjoon) 1001 - A-B  (0) 2021.01.23

+ Recent posts