Algorithm 01

yeah·2023년 5월 30일

Algorithm

목록 보기
1/27
post-thumbnail

Mission01. 기본 테스트

1) 변수 선언해보기

var a;
let a;
const a;

2) 5의 4 제곱을 코드로 표현해서 계산된 값 출력해보기

console.log(5**4);

3) 소수로 된 값(e.g. 2346.7)을 반올림해보기

// 반올림
Math.round(2346.7);
// 올림
Math.ceil();
// 내림(절삭)
Math.floor();

4) 분기문 작성해보기

// 분기문? 변수의 특정한 값이 x이다 라는 조건을 걸고 맞으면 이쪽, 
// 		 아니면 저쪽으로 가라고 지정
// if 문
if() {
}else if() {
} else {
}
// 삼항연산자
const a ? b c
// swich문
switch(a) {
       case 1: b=1;
       break;
	   case 2: b=2;
       break;
}

5) 반복문 작성해보기

// for문
for(초기값; 종료조건; 증감식){
   main logic
}
// while문
var sum = 0,
    i = 1;
while(i<=10){
  sum += i;
  i++;
}
console.log('1~'+(i-1)+'합은'+sum);
// do-while문
var i = 1;
do {
  console.log(i)
  i++
} while(i<=10);

Mission02. 알고리즘 맛보기

1) 최댓값 찾기

Q. 다음과 같이 숫자로 이루어진 배열이 있을 때, 이 배열 내에서 가장 큰 수를 반환하시오.
[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;
}
console.log("정답 = 6 / 현재 풀이 값 = ", find_max_num([3, 5, 6, 1, 2, 4]));
console.log("정답 = 6 / 현재 풀이 값 = ", find_max_num([6, 6, 6]));
console.log("정답 = 1888 / 현재 풀이 값 = ", find_max_num([6, 9, 2, 7, 1888]));

2) UP & DOWN 게임

Q. 문제 설명
1. 프로그램이 1~100의 숫자 중 하나를 랜덤으로 정합니다.
2. 사용자는 이 숫자를 맞추어야 합니다.
: 입력한 숫자보다 정답이 크면 → “UP” 아니면 → “DOWN”, 정답이면 → “CORRECT” 출력
3. 지금까지 숫자를 입력한 횟수를 알려줍니다.

const readline = require("readline");
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});
let answer = Math.floor(Math.random() * 100) + 1; // 1~100 사이의 난수를 발생시킨다.
let count = 0; // 몇 번 만에 맞췄는지 출력하는 변수
console.log(
  "1~100 중 랜덤 숫자 하나를 정하였습니다. 과연 당신이 맞출 수 있을까요?!"
);
function askQuestion() {
  rl.question("숫자 입력: ", (guess) => {
    count++;
    if (parseInt(guess) > answer) {
      console.log("DOWN"); // 사용자가 입력한 값보다 랜덤 숫자가 작으면 DOWN 출력!
      askQuestion();
    } else if (parseInt(guess) < answer) {
      console.log("UP"); // 사용자가 입력한 값보다 랜덤 숫자가 크면 UP 출력!
      askQuestion();
    } else if (parseInt(guess) === answer) {
      // 사용자가 입력한 값과 랜덤 숫자가 같으면 CORRECT 출력 후 종료
      console.log("CORRECT");
      console.log("숫자 입력한 횟수: " + count + "번");
      rl.close();
    }
  });
};
askQuestion(); // 함수 실행

2) UP & DOWN 게임

Q. 입력 문자열에 나타나는 각 알파벳의 종류, 갯수를 요약하여 나타내시오.
1. 입력으로 소문자의 알파벳 순으로 정렬된 문자열이 입력됩니다.
2. 각 알파벳은 중복이 가능합니다.
3. 중간에 없는 알파벳이 있을 수도 있습니다.

Ex) abc -> a1/ b1/ c1

function summarize_string(target_string) {
    let n = target_string.length;
    let count = 0; // 문자 갯수
    let result_str = '';
    // 0 ~ n-2까지 루프를 돌아요
    for (let i = 0; i < n - 1; i++) {
        // i번째 문자와 i + 1번째 문자가 같으면 count를 늘려야겠죠?!
        if (target_string[i] === target_string[i + 1]) {
            count++;
        } else {
            // i번째 문자와 i + 1번째 문자가 같지 않으면 카운트를 멈춰요! 
            // 그리고, 현재 문자랑 카운트를 혼합해서 요약표현을 만들어요!
            // count 초기화는 잊지마세요!
            result_str += target_string[i] + String(count + 1) + '/';
            count = 0;
        }
    }
    // 위에서 n-1 까지 루프를 안 돌았던 이유는 n-1이 마지막 문자이기 때문에 결산을 하기 위함!
    result_str += target_string[n - 1] + String(count + 1);
    return result_str;
}
let input_str = "acccdeee";
console.log(summarize_string(input_str));
profile
기록과 회고

0개의 댓글