λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’» μ½”λ”©ν…ŒμŠ€νŠΈ/λ°±μ€€

[λ°±μ€€/Java] 2753 μœ€λ…„ - 단좕평가 short circuit

by λ½€μ§œκΌ¬ 2025. 1. 17.
728x90
λ°˜μ‘ν˜•

문제

연도가 μ£Όμ–΄μ‘Œμ„ λ•Œ, μœ€λ…„μ΄λ©΄ 1, μ•„λ‹ˆλ©΄ 0을 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μœ€λ…„μ€ 연도가 4의 λ°°μˆ˜μ΄λ©΄μ„œ, 100의 λ°°μˆ˜κ°€ 아닐 λ•Œ λ˜λŠ” 400의 배수일 λ•Œμ΄λ‹€.

예λ₯Ό λ“€μ–΄, 2012년은 4의 λ°°μˆ˜μ΄λ©΄μ„œ 100의 λ°°μˆ˜κ°€ μ•„λ‹ˆλΌμ„œ μœ€λ…„μ΄λ‹€. 1900년은 100의 배수이고 400의 λ°°μˆ˜λŠ” μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— μœ€λ…„μ΄ μ•„λ‹ˆλ‹€. ν•˜μ§€λ§Œ, 2000년은 400의 배수이기 λ•Œλ¬Έμ— μœ€λ…„μ΄λ‹€.

μž…λ ₯

첫째 쀄에 연도가 주어진닀. μ—°λ„λŠ” 1보닀 ν¬κ±°λ‚˜ κ°™κ³ , 4000보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄λ‹€.

2000

좜λ ₯

첫째 쀄에 μœ€λ…„μ΄λ©΄ 1, μ•„λ‹ˆλ©΄ 0을 좜λ ₯ν•œλ‹€.

1

✏️ 풀이

μœ€λ…„μ€ 연도가 4의 λ°°μˆ˜μ΄λ©΄μ„œ, 100의 λ°°μˆ˜κ°€ 아닐 λ•Œ λ˜λŠ” 400의 배수일 λ•Œμ΄λ‹€.

λΌλŠ” 쑰건을 λ“£κ³ ,

(year % 400 ==0 || year % 4 == 0 && year % 100 !=0)

 

λΌλŠ” 식을 μ„Έμ› λ‹€. 400의 λ°°μˆ˜μΌλ•Œ ν•œλ²ˆ κ±°λ₯΄κ³ , κ·Έλ‹€μŒμ— λ’€λ₯Ό μ²˜λ¦¬ν•˜λ©΄ λ˜μ§€ μ•Šμ„κΉŒ μ‹Άμ—ˆλ‹€.

 

그리고 이 μˆœμ„œλ₯Ό

(year % 4 == 0 && year % 100 !=0 || year % 400 ==0)

μ΄λ ‡κ²Œ 바꿔도 λ³΄μ•˜λ‹€.

 

λ‚΄κ°€ μ΄λ ‡κ²Œ 이리저리 λ°”κΏ”λ³Έ μ΄μœ λŠ” λ°”λ‘œ

"단좕평가 short circuit"

λ•Œλ¬Έμ΄λ‹€.

 

πŸ“λ‹¨μΆ•ν‰κ°€ short circuit

  • && : μ•žμ˜ 것이 falseλ©΄ λ’€μ˜ 것을 평가할 ν•„μš” μ—†μŒ
  • || : μ•žμ˜ 것이 trueλ©΄ λ’€μ˜ 것을 평가할 ν•„μš” μ—†μŒ

=> λ”°λΌμ„œ μ—°μ‚° λΆ€ν•˜κ°€ 적은 μ½”λ“œλ₯Ό μ•žμ— λ„£μœΌλ©΄ λ¦¬μ†ŒμŠ€λ₯Ό μ ˆμ•½ν•  수 μžˆλ‹€.

 

 

μ΄λ ‡κ²Œ μˆœμ„œλ§Œ λ°”κΏ”μ£Όμ—ˆλŠ”λ°λ„ μ‹œκ°„ κ²°κ³Όκ°€ 닀름을 μ•Œ 수 μžˆλ‹€!

 

  • year % 400 == 0 을 μ•žμ— λ„£λŠ” 경우

400으둜 λ‚˜λˆ„μ–΄λ–¨μ–΄μ§€λŠ” κ²½μš°κ°€ λ“œλ¬ΌκΈ° λ•Œλ¬Έμ— λŒ€λΆ€λΆ„μ˜ 경우 두 번째 μ‘°κ±΄κΉŒμ§€ 평가가 μ§„ν–‰λœλ‹€.

=> κ·Έλž˜μ„œ 연산이 λ§Žμ•„μ§ˆ κ°€λŠ₯성이 크닀! (ν—‰ κ·ΈλŸ¬λ„€)

  • year % 4 == 0 을 μ•žμ— λ„£λŠ” 경우

4둜 λ‚˜λˆ„μ–΄λ–¨μ–΄μ§€λŠ” κ²½μš°κ°€ 더 많기 λ•Œλ¬Έμ— 첫 번째 μ‘°κ±΄μ—μ„œ 참이 ν™•μ •λ˜κ±°λ‚˜,

&& 연산에 μ˜ν•΄ 평가가 될 κ°€λŠ₯성이 λ†’μ•„

=> 이게 μ’€ 더 λΉ λ₯Όμˆ˜ μžˆλ‹€!

 

즉, μ΅œμ ν™”λ₯Ό μœ„ν•΄μ„œλŠ” 더 자주 참이 λ˜λŠ” 쑰건을 μ•žμ— λ‘λŠ”κ²ƒμ΄ μ’‹λ‹€.

✏️ 172ms λ‹΅

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int year = scanner.nextInt();

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

 

 

728x90
λ°˜μ‘ν˜•