min

[항해 99 알고리즘 주차 5일차] 본문

TIL

[항해 99 알고리즘 주차 5일차]

minprogramming 2023. 6. 22. 21:03

<회고록>

오늘 나는 항해 99 입학시험을 치렀다. 알고리즘 테스트가 정말 오랜만이라서 약간의 긴장감이 돌았다.

특히 문제 중에 상 문제가 있어서 더 당황했다.

그래서 나는 하 중 문제를 검토까지 철저하게 하고 나서 시간이 남으면 상 문제를 푸는 형식으로 전략을 잡았다.

최종적으로는 모든 문제를 풀 수 있었다. 문제를 풀고 나니 다른 사람은 어떻게 풀었는지 굉장히 궁금해졌다.

그래서 오늘은 내가 푼 문제들의 한에서 리뷰를 진행할까 한다.

 

1. 자연수 뒤집어 더하기(하)

<문제>

https://teamsparta.notion.site/Javascript-99eab3ea620541dd9fd308803e65d91c

 

Javascript 알고리즘 동료 코드

문제 1

teamsparta.notion.site

<나의 풀이>

function solution(n) {
  n = n.toString().split("").reverse();
  let sum = n.reduce((a, b) => Number(a) + Number(b), 0);
  let string = n.join("+");
  return string + "=" + sum.toString();
}

<다른 사람의 풀이>

function solution(n) {
  let result = ""; // 결과를 저장
  let arr = n.toString().split("").reverse(); // 입력값을 문자열로 바꿔준 후, 스플릿을 통해 한 단어씩 배열로 만들어주는데, reverse 로 순서를 반전한다.

  let sumVal = arr.reduce((a, b) => Number(a) + Number(b)); // reduce 를 이용해 모든 배열의 값을 더해줌

  for (let i = 0; i < arr.length; i++) {
    if (i == 0) {
      // 첫번째 반복에 result에 값을 넣어준다.
      result += `${arr[i]}`;
    } else if (i < arr.length) {
      // 두번째 반복부터 result 에 값을 넣어주는데 + 문자열을 추가해 넣어준다.
      result += `+${arr[i]}`;
    }
  }
  result += `=${sumVal}`; // result 에 값을 모두 함산한 값을 더해준다.
  return result;
}

console.log(solution(1532576));

2. Making Triangle(중)

<문제>

https://teamsparta.notion.site/Javascript-99eab3ea620541dd9fd308803e65d91c

 

Javascript 알고리즘 동료 코드

문제 1

teamsparta.notion.site

<나의 풀이>

 

function solution(star) {
  let result = "";
  for (let i = 1; i < star * 2; i += 2) {
    for (let j = 1; j < (star * 2 - i) / 2; j++) {
      result += " ";
    }
    for (let l = 1; l <= i; l++) {
      result += "*";
    }
    for (let k = 1; k < (star * 2 - i) / 2; k++) {
      result += " ";
    }
    result += "\n";
  }

<다른 사람의 풀이>

const solution = (star) => {
  const maxStar = 2 * (star - 1) + 1;

  for (let i = 0; i < star; i++) {
    let starRepeat = "*".repeat(2 * i + 1);
    let blankRepeat = " ".repeat((maxStar - starRepeat.length) / 2);

    console.log(blankRepeat + starRepeat + blankRepeat);
  }
};

3. 양옆앞뒤 큰 수 찾기(상)

<문제>

https://teamsparta.notion.site/Javascript-99eab3ea620541dd9fd308803e65d91c

 

Javascript 알고리즘 동료 코드

문제 1

teamsparta.notion.site

<나의 풀이>

function solution(arr1) {
  let d = [[1, 0],[0, 1],[0, -1],[-1, 0]];
  for (let i = 0; i < 5; i++) {
    for (let j = 0; j < 5; j++) {
      result = false;
      for (dis of d) {
        n_row = i + dis[0];
        n_col = j + dis[1];
        if (n_row >= 0 && n_row < 5 && n_col >= 0 && n_col < 5) {
          if (arr1[i][j] <= arr1[n_row][n_col] || arr1[n_row][n_col] === "*") {
            result = true;
          }
        }
      }
      if (!result) arr1[i][j] = "*";
    }
    console.log(arr1[i])
  }
}

let arr1 = [[7, 4, 6, 5, 9],[6, 1, 3, 4, 5],[4, 8, 5, 6, 9],[1, 3, 0, 6, 4],[6, 4, 8, 1, 7]];
solution(arr1);

<다른 사람의 풀이>

function solution(arr1){
    for(let i = 0; i < 5; ++i){
        let line = "";
        for(let j = 0; j < 5; ++j){
            line += (arr1[i][j] + " ");
            if(i > 0 && arr1[i][j] <= arr1[i-1][j]) continue; // 상
            if(j > 0 && arr1[i][j] <= arr1[i][j-1]) continue; // 좌
            if(j < 4 && arr1[i][j] <= arr1[i][j+1]) continue; // 우
            if(i < 4 && arr1[i][j] <= arr1[i+1][j]) continue; // 하
            line = line.slice(0, -2) + "* ";
        }
        console.log(line);
    }
}

let arr1=[[7,4,6,5,9], [6,1,3,4,5], [4,8,5,6,9], [1,3,0,6,4], [6,4,8,1,7]]; 
solution(arr1)