[doit자료구조 알고리즘 입문]01-1 알고리즘이란?


01-1 알고리즘이란?


알고리즘이란?

문제를 해결하기 위한 것으로, 명확하게 정의되고 순서가 있는 유한 개의 규칙으로 이루어진 집합
  1. 알고리즘이란 공부내용
    • 간단한 JAVA 키보드로 숫자와 문자열 입력하기
    • 매개변수
    • 메서드의 반환값과 메서드호출식의 평가
    • 세 값의 대소 관계와 중앙값
    • 조건 판단과 분기
    • 연산자와 피연산자
      • 단항 연산자
      • 2항 연산자
      • 3항 연산자
    • 순서도의 기호
      • 프로그램 순서도
      • 데이터
      • 처리
      • 미리 정의한 처리
      • 판단
      • 루프 범위
        • 실선
        • 점선
        • 파선
      • 단말

연습문제 Q1

package com.doit.chap01_exam;

/**
 * 네 값의 최대값을 구하는 max4 메서드를 작성하세요
 */
public class Max4_01_01 {
    public static void main(String[] args) {

        System.out.println("max4(4,3,2,1) = " + max4(4, 3, 2, 1)); // [A] a>b>c>d

    }

    /**
     * 네 값의 최대값을 구하는 max4 메서드
     * @param a
     * @param b
     * @param c
     * @param d
     * @return
     */
    static int max4(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;
    }

}

연습문제 Q2

package com.doit.chap01_exam;

/**
 * 세 값의 최소값을 구하는 min3 메서드를 작성하세요
 */
public class Min3_01_02 {
    public static void main(String[] args) {

        System.out.println("min3(3,2,1) = " + min3(3, 2, 1));

    }

    /**
     * 세 값의 최소값을 구하는 min3 메서드를 작성하세요
     * @param a
     * @param b
     * @param c
     * @return
     */
    static int min3(int a, int b, int c){
        int min = a;
        if(b < min)
            min = b;
        if(c < min)
            min = c;

        //구한 최소값을 호출한 곳으로 반환
        return min;
    }

}

연습문제 Q3

package com.doit.chap01_exam;

/**
 * 네 값의 최소값을 구하는 min4 메서드를 작성하세요
 */
public class Min4_01_03 {
    public static void main(String[] args) {

        System.out.println("min4(4,3,2,1) = " + min4(4, 3, 2, 1));

    }

    /**
     * 네 값의 최소값을 구하는 min4 메서드
     * @param a
     * @param b
     * @param c
     * @param d
     * @return
     */
    static int min4(int a, int b, int c, int d){
        int min = a;
        if(b < min)
            min = b;
        if(c < min)
            min = c;
        if (d < min)
            min = d;

        //구한 최소값을 호출한 곳으로 반환
        return min;
    }

}

연습문제 Q4

package com.doit.chap01_exam;

/**
 * 세 값의 대소 관계 13종류의 모든 조합에 대해 중앙값을 구하여 출력하는 프로그램을 작성하세요
 */
public class Med3_01_04 {
    public static void main(String[] args) {
        System.out.println("med3(3,2,1) = " + med3(3, 2, 1)); // [A] a>b>c
        System.out.println("med3(3,2,2) = " + med3(3, 2, 2)); // [B] a>b=c
        System.out.println("med3(3,1,2) = " + med3(3, 1, 2)); // [C] a>c>b
        System.out.println("med3(3,2,3) = " + med3(3, 2, 3)); // [D] a=c>b
        System.out.println("med3(2,1,3) = " + med3(2, 1, 3)); // [E] c>a>b
        System.out.println("med3(3,3,2) = " + med3(3, 3, 2)); // [F] a=b>c
        System.out.println("med3(3,3,3) = " + med3(3, 3, 3)); // [G] a=b=c
        System.out.println("med3(2,2,3) = " + med3(2, 2, 3)); // [H] c>a=b
        System.out.println("med3(2,3,1) = " + med3(2, 3, 1)); // [I] b>a>c
        System.out.println("med3(2,3,2) = " + med3(2, 3, 2)); // [J] b>a=c
        System.out.println("med3(1,3,2) = " + med3(1, 3, 2)); // [K] b>c>a
        System.out.println("med3(2,3,3) = " + med3(2, 3, 3)); // [L] b=c>a
        System.out.println("med3(1,2,3) = " + med3(1, 2, 3)); // [M] c>b>a
    }

    static int med3(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;
    }
}

연습문제 Q5

package com.doit.chap01_exam;

import java.util.Scanner;

/**
 * 3개의 정수값을 입력하고 중앙값을 구한 다음 출력합니다
 *
 * 연습1-5 해답
 * 가장 처음의 if문의 판단
 * if ((b >= a && c<= a) || (b <= a && c >= a))
 * 에 주목합니다. 여기서 b >= a 및 b <= a의 판단을 뒤집은 판단(실질적으로 같은 판단)을 이어지는 else 이후의
 * else if ((a > b && c < b) || (b <= a && c > b))
 * 으로 수행합니다. 결국 가장 처음의 if가 성립한 경우 2 번째의 if에서도 (실질적으로)같은 판단을 수행하므로 효율이 나빠집니다.
 */

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

        System.out.println("세 정수의 중앙값을 구합니다.");
        System.out.print("a의 값 : ");
        int a = stdIn.nextInt();
        System.out.print("b의 값 : ");
        int b = stdIn.nextInt();
        System.out.print("c의 값 : ");
        int c = stdIn.nextInt();

        System.out.println("중앙값은 " +med3(a, b, c) + "입니다.");
    }

    static int med3(int a, int b, int c) {
        if ((b >= a && c<= a) || (b <= a && c >= a))
            return a;
        else if ((a > b && c < b) || (b <= a && c > b))
            return b;
        return c;
    }

}





© 2017. by freelife

Powered by freelife