백준 오답 노트, 알고리즘 정리

Imnottired·2023년 3월 15일
0
post-thumbnail

백준 2563 색종이

const input = require("fs")
  .readFileSync("20230315/example10.txt")
  .toString()
  .trim()
  .split("\n");

const n = input[0];
let ans = 0;
let arr = Array.from(Array(100), () => Array(100).fill(0));
console.log(arr.length);
for (t = 1; t <= n; t++) {
  const tmp = input[t].split(" ").map((i) => parseInt(i));
  console.log(tmp);
  let r = tmp[0];
  let c = tmp[1];
  for (i = r; i < r + 10; i++) {
    for (j = c; j < c + 10; j++) {
      arr[i][j] += 1;
      if (arr[i][j] == 1) ans++;
      //   if (++arr[i][j] == 1) ans++;
    }
  }
}
console.log(ans);

넓이 100을 100개의 조각으로 쪼개서 건드릴때마다 1씩 키워주고 1이되는 순간
숫자를 체크하는 것이 인상적이었다.
사실 나는 그것보다 더적은 횟수로 체크하는 방법을 시도하였지만, 아직 나에게는
최적화보다는 정답을 맞추는 것이 더 중요한 것 같다.

백준 2566 최댓값

const input = require("fs")
  .readFileSync("20230315/example8.txt")
  .toString()
  .trim()
  .split("\n");
let max = -1;
let row = 0;
let column = 0;
for (let i = 0; i < input.length; i++) {
  let rowArray = input[i].split(" ").map(Number);
  let big = Math.max(...rowArray);
  if (big > max) {
    max = big;
    row = i + 1;
    column = rowArray.indexOf(big) + 1;
  }
}

console.log(max);
console.log(row, column);

0으로 된 9x9배열을 고려하지 않아서 고생했다.

반례를 찾아보는 것도 상당히 오랜 시간이 걸렸고,
그러다보니 백준 문제푸는 방법에 대해 익숙해졌다.
max=0을 넣어서 문제가 생겼다 다음에는 심플하게 가장 작은값을 넣어야겠다.

백준 10798 세로읽기

let input = require("fs")
  .readFileSync("20230315/example9.txt")
  .toString()
  .trim()
  .split("\n");


let inputArray = [];
let result = "";
for (let i = 0; i < input.length; i++) {
  inputArray[i] = input[i].split("");
}

let lengthMax = Math.max(
  ...input.map((el) => {
    return el.length;
  })
);
console.log(lengthMax);
console.log(inputArray);
for (let i = 0; i < lengthMax; i++) {
  for (let j = 0; j < inputArray.length; j++) {
    result += input[j][i] || "";
  }
}
console.log(result);

다 잘풀었지만 공백일 때 대처하는 방법을 잘쓴 것 같아서 좋았고,
2차 행렬에서 X->Y순에서 Y->X순으로 넘어가는 방법에 대해 정리하고 가면 좋다고 생각하여 가져왔다.

백준 10818

var input = require("fs")
  .readFileSync("20230315/example2.txt")
  .toString()
  .split("\n");

let numArray = input[1].split(" ");

let min = numArray[0];

let max = numArray[0];

for (let i = 1; i < numArray.length; i++) {
  if (min > Number(numArray[i])) {
    min = numArray[i];
  } else if (max < Number(numArray[i])) {
    max = numArray[i];
  }
}
console.log(min, max);

//number로 값 변환해줄것
//length 쓸 것

number로 변환해주고 처리하는 것이 명확하다고 깨달았다.
숫자는 number로 에러 처리를 더 줄여줄 수 있다.

indexOf

indexof는 문자열만 찾는다. 숫자인 경우 스트링을 해주자

Array(num).fill([]);

배열을 넣는 경우 같은 주소로 넣어주어서 push를 하면 전부다 같이 push가 되었다.

Array.from

Array.from() 은 문자열 등 유사 배열(Array-like) 객체나 이터러블한 객체를 배열로 만들어주는 메서드입니다.

let arr = Array.from(Array(100), () => Array(100).fill(0));

console.log(Array.from('foo'));
// Expected output: Array ["f", "o", "o"]

console.log(Array.from([1, 2, 3], x => x + x));
// Expected output: Array [2, 4, 6]



// 유사 배열 객체를 배열로 만드는 예시
console.log(Array.from({ 0: "찬민", 1: "희진", 2: "태인", length: 3 }));
// [ '찬민', '희진', '태인' ]

// 3. 함수의 매개변수들을 순서대로 배열로 만드는 예시
const funcA = (...arguments) => {
    return Array.from(arguments)
}

console.log(funcA(1,2,3,4,5));
// [ 1, 2, 3, 4, 5 ]

const arr = Array.from(Array(31), (_, index) => index + 1);

console.log(arr);
//위와 같은 의미
const arr = [];

for (let i = 1; i <= 31; i++) {
  arr.push(i);
}

Math.abs()

절대값 구하는 메소드

parseInt()

문자를 정수로 바꿔준다.

parseInt("10"); // 10
문자열 "10"을 숫자로 변환하여 정수 10을 리턴합니다.

parseInt("-10"); // -10
문자열 "-10"을 숫자로 변환하여 정수 음수 -10을 리턴합니다.

parseInt("10.9"); // 10
문자열 타입의 실수값은 소수점을 제거한 후, 정수값만 리턴합니다.

parseInt(10); // 10
파라미터로 문자열이 아닌 다른 타입의 값이 전달되면,
파라미터를 문자열로 변환하여 처리합니다.

parseInt("10n"); // 10
parseInt("10nnn13"); // 10
문자열의 첫글자가 숫자이고, 그 이후에 숫자가 아닌 다른 문자열이 나올 경우
숫자가 아닌 문자 이후의 값은 무시하고,
그 이전의 숫자만 정수로 변환합니다.

parseInt(" 10"); // 10
문자열의 첫글자는 반드시 숫자여야 하지만, 처음에 오는 공백 문자는 허용됩니다.

parseInt("10 "); // 10
문자열의 첫글자가 숫자이면, 뒤에 오는 공백은 무시됩니다.

parseInt("k10"); // NaN
문자열의 첫글자가 숫자가 아니면, NaN(Not a Number)를 리턴합니다.

profile
새로운 것을 배우는 것보다 정리하는 것이 중요하다.

0개의 댓글