본문 바로가기
Today I Learned 2024. 4. 25.

(24.04.25)[2주차] 알고리즘 세션+개인과제

알고리즘 세션과 더불어서 CODE KATA 가 진행되었는데

다행이도 완전 모르는 것이 아닌 프로그래머스에서 했던 내용을 기반으로 진행이 되어서 그나마 수월하게 할 수 있었다.

 

따라서 앞으로는

  • 내일배움캠프의 스케줄에 맞추서 제출을 하는 것은 의무
  • 개인적으로 KATA 시간 1시간 동안은 스케쥴 넘어서 알고리즘 연습을 쭉 할 수 있도록 할 것
    • 추후 모의면점 CODE KATA 비중을 두기 위해서 하루에 두개씩 이상을 한다고 생각

계획을 수정

 


알고리즘 세션 정리

알고리즘과 데이터 구조에 대한 세션으로 간단하게 잊지 않기 위해 정리를 했다.

더보기

알고리즘

  • 어떤 작업에서 입력 부터 출력 까지의 과정을 순차적으로 기술을 한 것

알고리즘의 필요성

  • 복잡한 문제의 효율적인 해결
    • 코딩테스트 및 포토폴리에 어필을 할 수 있는 부분

예시

  • DB 탐색/검색 알고리즘
  • 데이터 정렬/메모리 관리 알고리즘
  • 최단 경로 알고리즘

자료구조

  • 빠른 저장과 검색을 가능하게 하여 효율적인 데이터의 관리
  • 쉬운 접근을 위한 조직
  • 세부 정보를 숨기고 논리적인 측면에 집중할 수 있도록 하게끔 가능
  • 다양한 프로그램에서 공통적으로 재사용
  • 알고리즘을 최적화 시키는데 매우 중요한 구조

자료구조 형태

  • 배열 Array
  • 연결된 리스트 Linked List
  • 해시테이블 Hash table
  • 스택 Stack / 큐 Queue
  • 트리 Tree
  • 그래프 Graph

개인 과제 이슈

더보기
package calculator;

import java.util.Arrays;
import java.util.Scanner;

public class App {
    public static void main(String[] args) {
        /*연산 결과 10개를 저장할 길이 int배열 객체 생성*/
        int[] calculationResult = new int[10];
        /*연산 결과를 index에 저장하면서 카운트 초기값*/
        int idx = 0;

        Scanner sc = new Scanner(System.in);
        /* exit 문자열이 입력될 때 까지 연산 반복 반복문*/
        String input = null; // do - while 반복문 조건에 넣기 위해 입력값 초기화
        do {
            System.out.print("첫 번째 숫자를 입력하세요: ");
            /* Scanner를 사용하여 양의 정수를 입력받고 적합한 타입의 변수에 저장합니다. */
            int num1 = sc.nextInt();
            System.out.print("두 번째 숫자를 입력하세요: ");
            /* Scanner를 사용하여 양의 정수를 입력받고 적합한 타입의 변수에 저장합니다. */
            int num2 = sc.nextInt();
            System.out.print("사칙연산 기호를 입력하세요: "); // + - * / 중 하나를 입력받음
            /* charAt(idx)는 String타입 하나 입력된 기호를 charAt으로 char타입의 변수로 선언 */
            char operator = sc.next().charAt(0);


            int result = 0; // 연산 결과 초기값
            /*연산 시작*/
            if (operator == '/') { // 분모가 0인 나눗셈은 연산 없이 경고문구 출력
                System.out.println("나눗셈 연산에서 분모에 0이 입력될 수 없습니다.");
            } else {
                /* 입력된 operator 값 + - * / 에 따라 각각 연산 후, 결과값 출력*/
                switch (operator) {
                    case '+':
                        result = num1 + num2;
                        break;
                    case '-':
                        result = num1 - num2;
                        break;
                    case '*':
                        result = num1 * num2;
                        break;
                    case '/':
                        result = num1 / num2;
                        break;
                }
                System.out.println("결과: " + result);
                /*연산결과 배열에 저장*/
                calculationResult[idx] = result;
                idx++; // 다음 반복시 다음 인덱스에 넣기 위에 증가 연산자

                /*추가 연산 여부 확인*/
                System.out.println("더 계산하시겠습니까? (exit 입력 시 종료)");
                input = sc.next();
            }
        } while (!(input.equals("exit"))); // exit이 입력되면 반복문 종료, 그 외에는 계속 반복와

        System.out.println(Arrays.toString(calculationResult)); // 배열 저장 확인

    }
}

 

 

do-while 반복문의 조건절의 오류

이슈 :  do{} 절에 String input=sc.next() 다음 입력값으로 input 참조변수를 만들어줘도   {... } while (!(input.equals("exit"))); 조건절에서 input 변수가 없다고 오류

 

원인

  • {} 안에서 새롭게 선언한 변수는 Local 변수가 되어서 블럭밖에서는 쓸수가 없다는 것을 간과
  • 진짜 초급적인 내용인데 괜히 빠르게 코드를 작성하면서 자연스럽게 반복문/조건문은 어떠한 특수한 구문으로 인지를 해버려서 블럭이었다는 것을 까먹음

해결

  • do-while전 새롭게 입력될 새로운 input 변수를 미리 선언 String input = null;
  • do {} 블럭안에서는 그 변수의 값을 변경

 

과제가 살짝 어려워서 해매긴했지만, 

좀더 익숙해져서 좀더 쓰면서 과제를 마무리 할 수 있도록 해야할 것..