시간이 비교적 여유로울 때 알고리즘 공부를 하면 좋을 듯 싶어서,
회사에서 남는 시간에 알고리즘 공부를 하기로 했다.
참고서적은 Do it! 자료구조와 함께 배우는 알고리즘 입문 : 자바 편


구조적 프로그래밍😝

구조적 프로그래밍이란 ?
하나의 입구와 출구를 가진 구성요소만을 계층적으로 배치하여 프로그램을 구성하는 방법.
순차, 선택, 반복이라는 3종류의 제어 흐름을 이용한다.



논리연산과 드모르간 법칙

지난 시간의 ‘양수’만 받는 프로그램 말고 ‘2자리의 양수’로 제한하는 프로그램을 만들어보자!💪

    public void digits() {
            int no;
            
            System.out.println("2자리의 양수를 입력하세요.");
            
            do {
                System.out.print("입력 : ");
                no = stdIn.nextInt();
            }while(no < 10 || no > 99);
            
            System.out.println("번수 no의 값은 " + no + "가 되었습니다.");
    }

결과화면
이미지1

이전 실습과 같지만, 제어식에 의해 변수 no에 입력한 값이
10보다 작거나 99보다 크면 루프 본문을 반복한다.

  • 논리연산자의 단축 평가
    논리 연산의 식 전체를 평가한 결과가 왼쪽 피연산자의 평과 결과만으로 정확해지는 경우
    오른쪽 피연산자의 평가를 수행하지 않는데, 이를 단축 평가라고 한다.
    ex) no < 10 || no > 99에서 no가 10보다 작을 때

  • 드모르간 법칙
    각 조건을 부정하고 논리곱을 논라합으로, 논리합을 논리곱으로 바꾸고 다시 전체를 부정하면 원래의 조건과 같다.
  • x && y와 !(!x || !y)는 같다.
  • x || y와 !(!x && !y)는 같다.

그러므로 위 코드의 while(no < 10 || no > 99)while!(no >= 10 && no <= 99) 와 같다!










다중루프

반복안에서 또 반복을 할 수가 있는데, 이런 반복을 루프의 중첩에 따라 ‘이중루프, 삼중루프’로 부른다.

곱셈표

public void multi99Table() {
	System.out.println("-----곱셈표-----");
		
	for(int i = 1; i <= 9; i++) {
		for(int j = 1; j <= 9; j++) {
			System.out.printf("%3d", i * j);
		}
		System.out.println();
	}
}

결과화면
이미지2

바깥쪽의 for문은 행(세로방향)에 대한 반복, 안쪽의 for는 각 행의 가로방향에 대한 반복.





📐직각 이등변 삼각형 출력📐

이중루프를 이용하면 기호를 늘어놓아 삼각형이나 사각형 모양으로 출력할 수 있다.

public void triangleB() {
		Scanner stdIn = new Scanner(System.in);
		int n;
		
		System.out.println("왼쪽 아래가 직각인 이등변 삼각형을 출력합니다.");
		
		do {
			System.out.print("몇 단 삼각형입니까? : ");
			n = stdIn.nextInt();
		}while(n <= 0);
		
		for(int i=1; i <= n; i++) {
			for(int j=1; j <= i; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}

결과화면📐
이미지3

이 이중루프는 다음과 같이 처리된다.

  • i가 1일때 : j를 1 -> 1로 증가시키면서 * 를 출력한다. 그리고 줄바꿈한다. (*)
  • i가 2일때 : j를 1 -> 2로 증가시키면서 * 를 출력한다. 그리고 줄바꿈한다. (**)
  • i가 3일때 : j를 1 -> 3로 증가시키면서 * 를 출력한다. 그리고 줄바꿈한다. (***)
  • i가 4일때 : j를 1 -> 4로 증가시키면서 * 를 출력한다. 그리고 줄바꿈한다. (**)
  • i가 5일때 : j를 1 -> 5로 증가시키면서 * 를 출력한다. 그리고 줄바꿈한다. (*****)