728x90

 

문제 : 2753번: 윤년 (acmicpc.net)

 

2753번: 윤년

연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오. 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다. 예를 들어, 2012년은 4의 배수이면서

www.acmicpc.net

 

 

// brain Storming
// 조건
// 윤년 == 4의배수인 연도 중 100의 배수가 아닌 연도 or 400의 배수인 연도
// 4의 배수이면서 100의 배수가 아님 : (year%4 == 0) and !(year%100 == 0)

풀이

4배수인지를 구하는 방법은 num%4를 해서 나머지가 0이 나오면 해당 배수이고 다른 수가 나오면 4의 배수가 아니다

그렇기에 year%4 == 0이면 이라는 조건과 동시에 100의 배수가 아니어야 하기에 &&(and)조건으로 100의 배수가 아닌 조건 !(year%100 == 0)을 주어서 윤년을 구했고

마찬가지로 400의 배수도 year%400 == 0으로 구했다

이외의 나머지 else는 전부 평년

 

 

정답

import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int year = Integer.parseInt(br.readLine());

        if(((year%4 == 0) && !(year%100 == 0))){
            System.out.println("1");
        }else if(year%400 == 0){
            System.out.println("1");
        }else{
            System.out.println("0");
        }
    }
}

 

 

728x90
반응형
728x90

 

JAVA 제어문 - 4.1. 조건문 - 형식

조건문 Conditional Statement

 

모양

1)

if(조건) {
    실행될 코드
}

 

2)

if(조건) {
    실행될 코드
} else if(조건) {
    실행될 코드
} else {
    실행될 코드
}

 

 

 

시간에 순서에 따라서 a 1 b 출력하는 간단한 프로그램을 만들

System.out.println("a");
if(true) {
   System.out.println(1);
} else if(true){
     System.out.println(2);
} else {
    System.out.println(3);
}
System.out.println("b")

 


 

JAVA 제어문 - 4.2. 조건문 - 응용1

[run configuration] - [arguments] 값으로 egoing 입력

String id = "egoing";
String inputId = args[0];

System.out.println("Hi");

if(inputId.equals(id)) {
	System.out.println("Master!");
} else {
	System.out.println("Who are you?");
}

.equals() : 양쪽 내용을 비교한 값을 boolean type으로 반환

 

 

==에서는 같은 egoing인데 false 작동하고 .equals()로는 true 작동하는 이유

 == 주소값이 같아야 True .equals() 밸류값이 같으면 true이기 때문

다른말로, == true일려면 a=b 트루이지만 b 복사하여 새주소로 만들어진bfalse이다. 그러나 .equals() 이라면 값이 같으므로 true

 

 

== .equals() 차이

  종류 비교차이 call 방식
== 연산자(operator) 비교대상 주소값 call by reference
 .equals() 메소드(method) 비교대상의 내용 call by value

(주소값과 밸류값의 차이가 결국 call by reference value 개념과 같은 이야기인데

초보자들은 이해하기 어려우니 따로 분류)

 

 

Call by reference & value

1)call by reference : 주소값이 부여됨. 때문에 객체를 불러오면 주소값을 불러온다

      ex) class, 객체object

         String a = "100";

         String b = a;       # 같은 주소값

       (만약, new 써서 인스턴스를 만든다면 값은 값지만 주소는 다르게 된다)

 

2)call by value : 기본적으로 대상의 주소값을 가지지 않고 '' 할당받는 형태

     ex) int, float, double 같은 primitive type

 


 

JAVA 제어문 - 4.3. 조건문  - 응용2

 

[run configuration] - [arguments] 에서 두번째 인자값 추가 1111 입력

( 추가는 스페이스로 공백 주면 된다)

 

String id = "egoing";
String inputId = args[0];
String pass = "1111"; // pw : 1111
String inputPass = args[1];

System.out.println("Hi");

if(inputId.equals(id)) {
	if(inputPass.equals(pass)) {
		System.out.println("Master!");
	} else {
		System.out.println("Wrong pw!");
	}
} else {
	System.out.println("Who are you?");
}

 

// 위의 if문을 더 심플하게 해보는 코드

if(inputId.equals(id) && inputPass.equals(pass)) { # && 논리연산자(=and)
	System.out.println("Master!");
} else {
	System.out.println("Who are you?");
}

 

논리연산자(&&)

A and B(A B 둘다)처럼 양쪽 요건을 충족할 경우 작동하는 것이 논리연산자

(파이썬의 and 같다)

 

 

 

728x90
반응형

+ Recent posts