본문 바로가기
T.I.L. :: Today I Learned/항해99 14기 온보딩

3월 14일 Day9.

by DaSsom 2023. 3. 14.

 

매니저님이 지금은 알고리즘 문제의 답을 맞췄냐보다 얼마나 고민했는가에 초점을 두어야할 때라고 말씀하셨다. 나는 또 일주일 공부했다고 어느새 정답을 구해내는 것에 혈안이 되어 공부방법의 초점이 좀 엇나가고 있었던 것 같다. 지금은 문제가 풀리지 않아서 고민을 하며 불면의 밤 보내야할 때...!!!! 고민의 시간을 얼마나 가졌는지에 따라 성장속도가 달라질 것이다. 다시 한 번 마음 잡고 더 고민하는 시간을 가져보아야겠다 !! 알고리즘을 정복하는 그 날까지!! 🔜


 

  • 오늘의 목표 :: 아이디어 떠올리고 코드 구현 해보기, 많은 고민 하기

 

  • T.I.L

 

<자료구조 & 알고리즘>

 

* 동적계획법 (Dynamic Programming)

: 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법

: 부분 문제 반복 최적 부분 구조를 가지고 있는 알고리즘을 더 적은 시간에 풀 때 사용

: 다시 계산하지 말자! 반복되는 구조가 있을 때 여러번 계산할 것 같으니, 결과를 미리 적어두고(memoization) 다시 계산하지 않도록 효율적으로 진행

 - 재귀적으로 풀 수 있고 / 반복문을 사용하여 풀 수 있음 

  *** 기초적인 것부터 공부하고 추후에 심도있게 공부해볼 것 ⭐

 

 

* 반복

1) 사전 판단 반복
  : while, for 문 → 처음에 제어식을 평가한 결과가 0이면 루프 본문은 한번도 실행되지 않음
2) 사후 판단 반복
  : do-while 문 → 루프 본문이 반드시 1번 실행되고 조건문 판단 후 진행
    // 뺄셈 함수 만들기
    static void subtraction() {
        Scanner sc = new Scanner(System.in);
        System.out.print("a의 값 : ");
        int a = sc.nextInt();

        int b = 0;
        
    // 사전 판단 반복
        while ( true ) {
            System.out.print("b의 값 : ");
            b = sc.nextInt();
            if (a < b) {
                break;
            }
            System.out.println("a보다 큰 값을 입력하세요!");
        }
    
    // 사후 판단 반복
        do {
            System.out.print("b의 값 : ");
            b = sc.nextInt();
        } while (a > b);
        
        
        System.out.println(b-a);
    }

 

* 구조적 프로그래밍 (structured programming)

 : 하나의 입구와 하나의 출구를 가진 구성 요소만을 계층적으로 배치하여 프로그램을 구성하는 방법

 : 순차, 선택, 반복 이라는 3종류의 제어 흐름을 사용함

 

** 논리연산자의 단축평가 (short circuit evaluation)

 : || (or, 논리합) / && (and, 논리곱) → 왼쪽 피연산자에 의해 결과값이 도출되어 오른쪽 연산을 진행하지 않아도 될 때

 

** 드모르간 법칙 (De Morgan's lows)

 : 각 조건을 부정하고 논리곱을 논리합으로, 논리합을 논리곱으로 바꾸고, 전체를 부정하면 원래의 조건과 같다.

do {

} while ( n<10 || n > 99 );
do {

} while ( !( n>=10 && n <= 99 ) );

 

* 다중 루프 : 중첩된 반복문 ( 이중 루프, 삼중 루프 ...)

아주 대표적인 구구단 만들기 예시..!

  static void gugudan(){
        Scanner sc = new Scanner(System.in);
        System.out.print("단을 입력하세요 : ");
        int dan = sc.nextInt();

        for (int i = dan; i <= dan; i++) {
            System.out.println("-------" + dan + "단 -------");
            for (int j = 1; j <=9 ; j++) {
                System.out.printf("%02d * %02d = %02d", i, j, i * j);
                System.out.println();
            }
        }
    }

↓ 곱셈표 만들기 ↓

  static void multipleTable() {

        System.out.print("  |");
        for (int i = 1; i <= 9; i++) {
            System.out.printf(" %2d", i);
        }
        System.out.println("\n--+----------------------------");
        for (int i = 1; i <= 9; i++) {
            System.out.print(i + " |");
            for (int j = 1; j <= 9; j++) {
                System.out.printf("%3d", i * j);
            }
            System.out.println();
        }
    }

↓ n단의 피라미드 만들기 ↓

static void piramid() {
        Scanner sc = new Scanner(System.in);
        System.out.print("몇 단의 피라미드를 만들까요 ? :");
        int n = sc.nextInt();

        for (int i = 1; i <= n; i++) {
            for (int j = 0; j < n - i; j++) {
                System.out.print(" ");
            }
            for (int j = 0; j < (i - 1) * 2 + 1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }

    }

 

 

 

 

 

  • 오늘 푼 문제

다리놓기 :: https://www.acmicpc.net/problem/1010

 

1010번: 다리 놓기

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다.

www.acmicpc.net

 

피보나치 함수 :: https://www.acmicpc.net/problem/1003

 

1003번: 피보나치 함수

각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.

www.acmicpc.net

(하나도 신나지 않지만) 신나는 함수 실행 :: https://www.acmicpc.net/problem/9184

 

9184번: 신나는 함수 실행

입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다.

www.acmicpc.net

 

'T.I.L. :: Today I Learned > 항해99 14기 온보딩' 카테고리의 다른 글

3월 16일 Day11.  (0) 2023.03.16
3월 15일 Day10.  (0) 2023.03.15
3월 13일 Day8.  (0) 2023.03.13
3월 11일 Day6.  (0) 2023.03.11
3월 10일 Day 5.  (0) 2023.03.10