본문 바로가기
공부기록/알고리즘

Chapter 01-1. 기본 알고리즘_알고리즘이란?

by 루팽 2023. 11. 19.

세 값의 최댓값 구하기

package ch01_1;

import java.util.Scanner;

// 3개의 정숫값 입력하고 최댓값 출력하기
public class Ex01_max3 {
  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int a = scan.nextInt();
    int b = scan.nextInt();
    int c = scan.nextInt();
    int max = a;
    if (b > max)
      max = b;
    if (c > max)
      max = c;
    System.out.println("최댓값 => " + max);
  }
}

 

세 값의 최댓값 구하는 메서드 만들기

package ch01_1;

// 3개의 정숫값 가운데 최댓값 출력하기
public class Ex02_max3Method {
  // a, b, c의 최댓값 반환하는 메서드
  static int max(int a, int b, int c) {
    int max = a;
    if (b > max)
      max = b;
    if (c > max)
      max = c;
    return max;
  }

  public static void main(String[] args) {
    System.out.println("3,2,1 => " + max(3, 2, 1));
    System.out.println("3,2,2 => " + max(3, 2, 2));
    System.out.println("3,1,2 => " + max(3, 1, 2));
    System.out.println("3,2,3 => " + max(3, 2, 3));
    System.out.println("2,1,3 => " + max(2, 1, 3));
    System.out.println("3,3,2 => " + max(3, 3, 2));
    System.out.println("3,3,3 => " + max(3, 3, 3));
    System.out.println("2,2,3 => " + max(2, 2, 3));
    System.out.println("2,3,1 => " + max(2, 3, 1));
    System.out.println("2,3,2 => " + max(2, 3, 2));
    System.out.println("1,3,2 => " + max(1, 3, 2));
    System.out.println("2,3,3 => " + max(2, 3, 3));
    System.out.println("1,2,3 => " + max(1, 2, 3));
  }
}

 

연습문제_네 값의 최댓값 구하는 메서드

package ch01_1;

import java.util.Scanner;

public class Ex03_max4Method {
  // 네 값의 최대값 구하는 메서드
  static int max(int a, int b, int c, int d) {
    int max = a;
    if (b > max)
      max = b;
    if (c > max)
      max = c;
    if (d > max)
      max = d;
    return max;
  }

  public static void main(String[] args) {
    System.out.println("1, 2, 3, 4 => " + max(1, 2, 3, 4));
    System.out.println("5, 7, 3, 2 => " + max(5, 7, 3, 2));
    System.out.println("2, 9, 3, 7 => " + max(2, 9, 3, 7));
    System.out.println("3, 2, 4, 4 => " + max(3, 2, 4, 4));
    System.out.println("5, 7, 6, 4 => " + max(5, 7, 6, 4));

    // 직접 입력받기
    Scanner scan = new Scanner(System.in);
    int a = scan.nextInt();
    int b = scan.nextInt();
    int c = scan.nextInt();
    int d = scan.nextInt();
    System.out.println(a + ", " + b + ", " + c + ", " + d + " => " + max(a, b, c, d));
  }
}

 

연습문제_세 값의 최솟값 구하는 메서드

package ch01_1;

import java.util.Scanner;

public class Ex04_min3Method {
  // 세 값의 최솟값을 구하는 메서드
  static int min(int a, int b, int c) {
    int min = a;
    if (min > b)
      min = b;
    if (min > c)
      min = c;
    return min;
  }

  public static void main(String[] args) {
    System.out.println("1, 2, 3 => " + min(1, 2, 3));
    System.out.println("2, 3, 1 => " + min(2, 3, 1));
    System.out.println("3, 2, 1 => " + min(3, 2, 1));
    System.out.println("1, 1, 3 => " + min(1, 1, 3));
    System.out.println("2, 3, 3 => " + min(2, 3, 3));

    // 직접 입력받기
    Scanner scan = new Scanner(System.in);
    int a = scan.nextInt();
    int b = scan.nextInt();
    int c = scan.nextInt();
    System.out.println(a + ", " + b + ", " + c + " => " + min(a, b, c));

  }
}

 

연습문제_네 값의 최솟값 구하는 메서드

package ch01_1;

import java.util.Scanner;

public class Ex05_min4Method {
  // 네 값의 최솟값을 구하는 메서드
  static int min(int a, int b, int c, int d) {
    int min = a;
    if (min > b)
      min = b;
    if (min > c)
      min = c;
    return min;
  }

  public static void main(String[] args) {
    System.out.println("1, 2, 3, 4 => " + min(1, 2, 3, 4));
    System.out.println("2, 3, 1, 5 => " + min(2, 3, 1, 5));
    System.out.println("3, 2, 1, 4 => " + min(3, 2, 1, 4));
    System.out.println("1, 1, 3, 2 => " + min(1, 1, 3, 2));
    System.out.println("2, 3, 3, 1 => " + min(2, 3, 3, 1));

    // 직접 입력받기
    Scanner scan = new Scanner(System.in);
    int a = scan.nextInt();
    int b = scan.nextInt();
    int c = scan.nextInt();
    int d = scan.nextInt();
    System.out.println(a + ", " + b + ", " + c + ", " + d + " => " + min(a, b, c, d));
  }
}

 

3개의 정숫값을 입력하고 중앙값 구하기

package ch01_1;

import java.util.Scanner;

// 3개의 정숫값을 입력하고 중앙값 출력
public class Ex06_median {
  static int med(int a, int b, int c) {
    if (a >= b) {
      if (b >= c) {
        return b;
      } else if (a <= c) {
        return a;
      } else {
        return c;
      }
    } else if (a > c) {
      return a;
    } else if (b > c) {
      return c;
    } else {
      return b;
    }
  }

  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int a = scan.nextInt();
    int b = scan.nextInt();
    int c = scan.nextInt();
    System.out.println(a + "," + b + "," + c + " => " + med(a, b, c));
  }
}

 

연습문제_세 값의 대소관계인 13가지 조합의 중앙값 구하여 출력

package ch01_1;

// 세 값의 대소관계인 13가지 조합의 중앙값 구하여 출력
public class Ex07_median13 {
  static int med(int a, int b, int c) {
    if (a >= b) {
      if (b >= c) {
        return b;
      } else if (a <= c) {
        return a;
      } else {
        return c;
      }
    } else if (a > c) {
      return a;
    } else if (b > c) {
      return c;
    } else {
      return b;
    }
  }

  public static void main(String[] args) {
    System.out.println("3,2,1 => " + med(3, 2, 1)); // a>b>c
    System.out.println("3,2,2 => " + med(3, 2, 2)); // a>b=c
    System.out.println("3,1,2 => " + med(3, 1, 2)); // a>c>b
    System.out.println("3,2,3 => " + med(3, 2, 3)); // a=c>b
    System.out.println("2,1,3 => " + med(2, 1, 3)); // c>a>b
    System.out.println("3,3,2 => " + med(3, 3, 2)); // a=b>c
    System.out.println("3,3,3 => " + med(3, 3, 3)); // a=b=c
    System.out.println("2,2,3 => " + med(2, 2, 3)); // c>a=b
    System.out.println("2,3,1 => " + med(2, 3, 1)); // b>a>c
    System.out.println("2,3,2 => " + med(2, 3, 2)); // b>a=c
    System.out.println("1,3,2 => " + med(1, 3, 2)); // b>c>a
    System.out.println("2,3,3 => " + med(2, 3, 3)); // b=c>a
    System.out.println("1,2,3 => " + med(1, 2, 3)); // c>b>a
  }
}

 

연습문제_아래의 메소드가 Ex06_median보다 효율이 떨어지는 이유

package ch01_1;

// 아래의 메소드가 Ex06_median보다 효율이 떨어지는 이유
public class Ex08_median {
  static int med(int a, int b, int c) {
    /*
     * if ((b >= a && c<= a) || (b <= a && c >= a)
     * 여기서 b >= a 및 b <= a의 판단을 뒤집은 판단 (실질적으로 동일한 판단)이
     * 계속하여 else if ((a > b && c < b) || (b <= a && c > b) 로 수행됨
     * 즉, 처음 if가 성립하지 않는 경우 2번째 if에서도 같은 판단을 수행하므로 효율이 나빠짐
     */
    if ((b >= a && c <= a) || (b <= a && c >= a)) {
      return a;
    } else if ((a > b && c < b) || (a < b && c > b)) {
      return b;
    } else {
      return c;
    }
  }

  public static void main(String[] args) {
    System.out.println("3,2,1 => " + med(3, 2, 1)); // a>b>c
    System.out.println("3,2,2 => " + med(3, 2, 2)); // a>b=c
    System.out.println("3,1,2 => " + med(3, 1, 2)); // a>c>b
    System.out.println("3,2,3 => " + med(3, 2, 3)); // a=c>b
    System.out.println("2,1,3 => " + med(2, 1, 3)); // c>a>b
    System.out.println("3,3,2 => " + med(3, 3, 2)); // a=b>c
    System.out.println("3,3,3 => " + med(3, 3, 3)); // a=b=c
    System.out.println("2,2,3 => " + med(2, 2, 3)); // c>a=b
    System.out.println("2,3,1 => " + med(2, 3, 1)); // b>a>c
    System.out.println("2,3,2 => " + med(2, 3, 2)); // b>a=c
    System.out.println("1,3,2 => " + med(1, 3, 2)); // b>c>a
    System.out.println("2,3,3 => " + med(2, 3, 3)); // b=c>a
    System.out.println("1,2,3 => " + med(1, 2, 3)); // c>b>a
  }
}

 

정숫값 부호 판단

package ch01_1;

import java.util.Scanner;

public class Ex09_judgeSign {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.print("정수를 입력하세요 => ");
        int n = scan.nextInt();

        if(n>0) {
            System.out.println("이 수는 양수입니다.");
        } else if(n<0) {
            System.out.println("이 수는 음수입니다.");
        } else {
            System.out.println("이 수는 0입니다.");
        }
    }
}

 

ABC 출력 else

package ch01_1;

import java.util.Scanner;

public class Ex10_judgeABC1 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.print("정수를 입력하세요 => ");
        int n = scan.nextInt();

        if(n == 1) {
            System.out.println("A");
        } else if(n == 2) {
            System.out.println("B");
        } else {
            System.out.println("C");
        }
    }
}

 

ABC 출력 else if

package ch01_1;

import java.util.Scanner;

public class Ex11_judgeABC2 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.print("정수를 입력하세요 => ");
        int n = scan.nextInt();

        if(n == 1) {
            System.out.println("A");
        } else if(n == 2) {
            System.out.println("B");
        } else if(n == 3) {
            System.out.println("C");
        }
        // 아무 작업도 하지 않는 else가 숨어있음
        else;
    }
}

 

3항 연산자

// x와 y중 큰 값을 a에 대입
a = (x > y) ? x : y;
// c가 0이면 전자, 0이 아니면 후자 출력
System.out.println((c == 0) ? "c는 0" : "c는 0이 아님");

댓글