본문 바로가기

코딩테스트

[JAVA] 조건문

1330 두 수 비교하기

조건문 사용하기

if (조건문){

실행문장;

}

else if (){ ~~ }

else{ ~~ }

대충 이런 구조임.

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

public class Main {

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

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

         String str = br.readLine();
        StringTokenizer st = new StringTokenizer(str," ");
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());

        if(a>b){
            System.out.println(">");
        }
        else if(a<b){
            System.out.println("<");
        }
        else{
            System.out.println("==");
        }

    }
}

삼항연산자를 사용할 수도 있다.

속도가 딱히 빠르지는 않다고 한다. 가독성 때문에 쓰는 경우가 가끔 있는데 난 안좋아함.

변수 = (조건문) ? (true일 때 실행) : (false일 때 실행);

중첩도 가능하다!

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

public class Main {

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

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

         String str = br.readLine();
        StringTokenizer st = new StringTokenizer(str," ");
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());

        String str = (A>B) ? ">" : ((A<B) ? "<" : "==" );
        System.out.println(str);

    }
}

9498 시험성적

다중 if문 사용하기.

switch문을 이용하려고 했는데...값에는 수식이나 변수가 들어갈 수 없다.

switch(식)의 식과 case (값)에 있는 값끼리만 비교가 가능하다....

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

public class Main {

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

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

         int A = Integer.parseInt(br.readLine());

        if(A>=90) System.out.println("A");
        else if(A>=80) System.out.println("B");
        else if (A>=70) System.out.println("C");
        else if(A>=60) System.out.println("D");
        else System.out.println("F");
    }
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class Main {

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

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    int a = Integer.parseInt(br.readLine());


    switch(a){
      case (a>=90):
        System.out.println("A");
        break;
      case (a>=80):
        System.out.println("B");
        break;
      case (a>=70):
        System.out.println("C");
        break;
      case (a>=60):
        System.out.println("D");
        break;
      default:
        System.out.println("F");
        break;
    }

  }
}

바보같이 이렇게 하고 틀림...ㅎ

 


2753 윤년

조건에 다양한 연산자 사용하기

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

public class Main {

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

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    int a = Integer.parseInt(br.readLine());


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

  }
}

다중 if문으로 해도 되지만, 위와 같이 논리 연산자가 더 편리하다.

 


14681 사분면 고르기

중첩 if문 사용

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

public class Main {

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

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    int a = Integer.parseInt(br.readLine());
    int b = Integer.parseInt(br.readLine());


    if (a>0){
      if (b>0){
        System.out.println(1);
      }
      else{
        System.out.println(4);
      }
    }
    else{
      if (b>0){
        System.out.println(2);
      }
      else{
        System.out.println(3);
      }
    }
  }
}

 


2884 알람 시계

알고리즘 :

시와 분을 입력 받는다.

if (시!=0)

if (분<45) -> 시-1, 60-(45-분) 출력하기

else 시, 분-45 출력하기

else

if (분<45) -> 23, 60-(45-분) 출력하기

else 시, 분-45 출력하기

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

public class Main {

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

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    String[] str = br.readLine().split(" ");
    int h = Integer.parseInt(str[0]);
    int m = Integer.parseInt(str[1]);


    if (h!=0){
      if (m<45){
        System.out.println((h-1) + " " + (60-(45-m)));
      }
      else{
        System.out.println(h+" "+ (m-45));
      }
    }
    else{
      if (m<45){
        System.out.println(23+" "+ (60-(45-m)));
      }
      else{
        System.out.println(h+" "+ (m-45));
      }
    }
  }
}

중요한건 아닌데 유의할 점

1. print문에서 , 로 연결할 수 없다.

2. print문 안에 +를 사용하면 연산할 때 괄호 안에 넣어서 연산을 먼저 해주기

 


2525 오븐 시계

간단할 것이라 생각했는데, 필요한 시간의 제한이 <=1000이여서 아주 약간 복잡해졌다.

알고리즘 :

시, 분, 필요시각(m)을 입력받는다.

a = 시*60 + 분 + m

시/60%24, 분%60 을 출력한다.

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

public class Main {

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

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    String[] str = br.readLine().split(" ");
    int k = Integer.parseInt( br.readLine());
    int h = Integer.parseInt(str[0]);
    int m = Integer.parseInt(str[1]);

    int a=h*60+m+k;
    System.out.println((a/60%24)+ " "+ (a%60));



  }
}

모두 한꺼번에 분으로 바꿔준 뒤 계산하고 나머지, 몫 연산자를 이용해 종료 시각을 출력하는 것이다.

시간이 24를 넘어갈 수 없으므로 24로 한번더 나머지 연산을 수행한다.

 


2480 주사위 세 개

알고리즘 :

if 주사위 세 개가 모두 다른 경우 : max값 찾고 계산

else:

if a==b || a==c : a값으로 계산

else : b값으로 계산

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

public class Main {

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

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    String[] str = br.readLine().split(" ");
    int a = Integer.parseInt(str[0]);
    int b = Integer.parseInt(str[1]);
    int c = Integer.parseInt(str[2]);

    if (a!=b && a!=c && b!=c){
      if (a>b){
        if(a>c){
          System.out.println(a*100);
        }
        else{
          System.out.println(c*100);
        }
      }
      else{
        if(b>c){
          System.out.println(b*100);
        }
        else{
          System.out.println(c*100);
        }
      }
    }

    else{
      if (a==b && b==c){
        System.out.println(10000 + a*1000);
      }
      else{
        if (a==b || a==c){
          System.out.println(1000 + a*100);
        }
        else{
          System.out.println(1000 + b*100);
        }
      }
    }



  }
}

a==b || a==c 에 만족하지 않는 경우는 b==c만 있다.

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int a, b, c;
        a = Integer.parseInt(st.nextToken());
        b = Integer.parseInt(st.nextToken());
        c = Integer.parseInt(st.nextToken());

        // 만약 모든 변수가 다른 경우
        if (a != b && b != c && a != c) {
            int max = Math.max(a, Math.max(b, c));
            System.out.println(max * 100);
        }
        // 3개의 변수가 모두 같은 경우
        else if (a == b && a == c) {
            System.out.println(10000 + a * 1000);
        }
        // a가 b혹은 c랑만 같은 경우
        else if(a == b || a == c) {
            System.out.println(1000 + a * 100);
        }
        // b가 c랑 같은 경우
        else {
            System.out.println(1000 + b * 100);
        }
    }
}

max값을 if문을 이용하여 푸는 것이 좀..귀찮았는데 JAVA에서 제공하는 Math.math 메소드를 이용하여 쉽게 찾을 수 있다.

 


회고

아직 python이 편하다..ㅜ

JAVA열심히 하다보면 python보다 재밌어지는 날이 올까...

github에 백준 연습한 것을 올릴까 고민중이다.

'코딩테스트' 카테고리의 다른 글

[JAVA] 문자열  (0) 2024.01.16
[JAVA] 1차원 배열  (0) 2024.01.14
[JAVA] 반복문  (1) 2024.01.13
[JAVA] 입출력과 사칙연산  (1) 2024.01.10
[BAEKJOON] 24060 : 알고리즘 수업 - 병합 정렬 1  (0) 2023.07.28