[TIL] 24.01.03

sssujijjl·2024년 1월 3일

[TIL]

목록 보기
10/51

[알고리즘 특강]

  • 알고리즘 이란?
    어떤 문제의 해결을 위하여, 입력된 자료를 토대로 하여 원하는 출력을 유도하여 내는 규칙의 집합.
    여러 단계의 유한 집합으로 구성되는데, 각 단계는 하나 또는 그 이상의 연산을 필요로 한다.

[알고리즘 맛보기 문제]

물론 나는.. 하나도 풀지 못했다..!
그래도 보면서 어떤 기능으로 작동하는지 보면서 이해해서 설명할 수 있도록 공부해보았다.

  • 최대값 찾기
    다음과 같이 숫자로 이루어진 배열이 있을 때, 이 배열 내에서 가장 큰 수를 반환하시오.
let array = [3, 5, 6, 1, 2, 4]

function find_max_num(array) {

    let max_num = array[0];
    
    for (let i = 0; i < array.length; i++) { 
        if (array[i] > max_num) {
            max_num = array[i];
        }
    }
    return max_num; 
}

// max_num : 배열의 0번째 값으로 초기화
// array[i]가 max_num 보다 크다면 그 값이 max_num으로 들어간다!
  • UP & DOWN 게임
  1. 프로그램이 1~100의 숫자 중 하나를 랜덤으로 정합니다.
  2. 사용자는 이 숫자를 맞추어야 합니다!
    : 입력한 숫자보다 정답이 크면 → “UP” 아니면 → “DOWN”, 정답이면 → “CORRECT” 출력
  3. 지금까지 숫자를 입력한 횟수를 알려줍니다.
// 사용자 입력을 받는 부분
const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

// answer에 1 ~ 100 사이의 랜덤한 숫자를 할당
let answer = Math.floor(Math.random() * 100) + 1;

let count = 0;
// count에 도전한 숫자를 기록

// 게임 시작 메세지
console.log(
  "1~100 중 랜덤 숫자 하나를 정하였습니다. 과연 당신이 맞출 수 있을까요?!"
);


function askQuestion() {

// 사용자에게 "숫자 입력"이라는 메세지 출력, 숫자 입력하기
  rl.question("숫자 입력: ", (guess) => {
    count++;
// 입력할때마다 count 증가
    
    if (parseInt(guess) > answer) {
      console.log("DOWN");
      askQuestion();
// 정답보다 입력한 값이 크면 "DOWN" 메세지 출력, 숫자를 다시 입력하기 위한 함수를 다시 호출
      
    } else if (parseInt(guess) < answer) {
      console.log("UP");
      askQuestion();
// 정답보다 입력한 값이 크면 "UP" 메세지 출력,
숫자를 다시 입력하기 위한 함수를 다시 호출
      
    } else if (parseInt(guess) === answer) {
      console.log("CORRECT");
      console.log("숫자 입력한 횟수: " + count + "번");
// 정답과 입력한 값이 같은 경우, "CORRECT" 메세지 출력, count된 숫자 출력

      rl.close(); // 프로그램 종료
    }
  });
};

askQuestion();
  • 문자열 요약하기
  1. 입력으로 소문자의 알파벳 순으로 정렬된 문자열이 입력됩니다.
  2. 각 알파벳은 중복이 가능합니다.
  3. 중간에 없는 알파벳이 있을 수도 있습니다.

입,출력 예시와 같이 입력 문자열에 나타나는 각 알파벳의 종류,갯수를 요약하여 나타내시오.

function summarize_string(target_string) {

    let n = target_string.length;
// n에 target_string 길이를 저장

    let count = 0;
// count에 현재 문자의 등장 횟수

    let result_str = '';
// result_str에 최종 결과문자열을 저장

    for (let i = 0; i < n - 1; i++) {
        if (target_string[i] === target_string[i + 1]) {
            count++;
// i번째의 문자와 그 다음 문자가 같으면 count 증가
            
        } else {
            result_str += target_string[i] + String(count + 1) + '/';
            count = 0;
// 다르면, 현재까지의 문자와 등장 횟수를 result_str에 추가하고 count를 초기화
        }
    }
    result_str += target_string[n - 1] + String(count + 1);
// 마지막 문자와 숫자를 result_str에 추가
// 마지막 문자까지 반복문이 돌지 않아서 추가해줘야함!

    return result_str;
}

let input_str = "acccdeee";

console.log(summarize_string(input_str));

[배운점]

오늘 아침 9시에 알고리즘 특강을 한 후 멘탈이 나갔다 ㅎㅎ

아직 많이 배우지는 않았지만 갑자기 수준이 확 올라간 느낌이였다.
그래도.. 이 코드를 보며 배우고 내가 코드를 짤 때 배웠던 내용이 생각난다면 좋겠다.

0개의 댓글