[코딩테스트] 프로그래머스 문제모음

2022. 11. 2. 09:31·개발/알고리즘
728x90
반응형

1. 안전지대

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

폭탄 주변이 중복될수 있으니 중복제거를 위해 객체로 접근했다.

 

(1) 1번 풀이

function solution(board) {
  const boomIndex = {};
  for (let i = 0; i < board.length; i++) {
    for (let k = 0; k < board.length; k++) {
      if (board[i][k] == 1) {
        boomIndex[i - 1 + "" + (k - 1)] = 1;
        boomIndex[i - 1 + "" + k] = 1;
        boomIndex[i - 1 + "" + (k + 1)] = 1;
        boomIndex[i + "" + (k - 1)] = 1;
        boomIndex[i + "" + k] = 1;
        boomIndex[i + "" + (k + 1)] = 1;
        boomIndex[i + 1 + "" + (k - 1)] = 1;
        boomIndex[i + 1 + "" + k] = 1;
        boomIndex[i + 1 + "" + (k + 1)] = 1;
      }
    }
  }
  return (
    board.length ** 2 -
    Object.keys(boomIndex).filter(
      (v) => v[0] < board.length && v[1] < board.length
    ).length
  );
}

테스트케이스 7만 실패 => 2자리수의 행렬인 board가 나오면 오류

 

(2) 2번 풀이

function solution(board) {
  let boomIndex = {};
  for (let i = 0; i < board.length; i++) {
    for (let k = 0; k < board.length; k++) {
      if (board[i][k]) {
        if (i + 1 < board.length && k + 1 < board.length)
          boomIndex[i + 1 + "" + (k + 1)] = 1;
        if (k + 1 < board.length) {
          boomIndex[i - 1 + "" + (k + 1)] = 1;
          boomIndex[i + "" + (k + 1)] = 1;
        }
        if (i + 1 < board.length) {
          boomIndex[i + 1 + "" + (k - 1)] = 1;
          boomIndex[i + 1 + "" + k] = 1;
        }
        boomIndex[i - 1 + "" + (k - 1)] = 1;
        boomIndex[i - 1 + "" + k] = 1;
        boomIndex[i + "" + (k - 1)] = 1;
        boomIndex[i + "" + k] = 1;
      }
    }
  }
  const boom = Object.keys(boomIndex).filter((v) => +v >= 0).length;
  return board.length ** 2 - boom;
}

조건을 for문안에 다 넣어버렸다.

2. 짝지어 제거하기

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

스택큐라는 알고리즘을 알게된 문제

(1) 1번 풀이

function solution(s) {
  for (let i = s.length - 1; i > 0; i--) {
    if (s[i] == s[i - 1]) {
      s = s.split(s[i] + s[i - 1]).join("");
    }
    if (s == "") return 1;
  }
  return 0;
}

효율성테스트 시간초과

for문안에 배열메서드들을 사용해서 시간복잡도가 O(n^2)

 

(2) 스택큐 풀이

function solution(s) {
  const arr = [];
  for (const value of s) {
    if (value == arr.at(-1)) arr.pop();
    else arr.push(value);
  }
  return arr.length ? 0 : 1;
}

 

배열 메서드들중 push와 pop은 시간복잡도가 O(1)이다.

그래서 두 메서드들을 이용해 배열을 이용해 스택을 만들었다.

3. n개의 최소 공배수

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

예전 알게된 유클리드 호재법을 복습하는 느낌이다.

function solution(arr) {
  return arr.reduce((a, b) => {
    [a, b] = a > b ? [a, b] : [b, a];
    let r;
    for (var ab = a * b; (r = a % b); a = b, b = r) {}
    return (a = ab / b);
  });
}

4. 삼총사

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

function solution(number) {
  let answer = 0;
  for (let i = 0; i < number.length - 2; i++) {
    for (let k = i + 1; k < number.length - 1; k++) {
      for (let j = k + 1; j < number.length; j++) {
        if (number[i] + number[k] + number[j] == 0) answer += 1;
      }
    }
  }
  return answer;
}

5. 숫자짝궁

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

(1) 1번 풀이

function solution(X, Y) {
  var answer = [];
  for (let i = 0; i < X.length; i++) {
    if (Y.includes(X[i])) {
      answer.push(X[i]);
      Y = Y.replace(X[i], "");
    }
  }
  return answer.length == 0 ? "-1" : answer.sort((a, b) => b - a).join("") + "";
}

런타임 오류 

for문안에 replace, includes 가 들어가서 시간복잡도가 O(n^2)이다.

 

(2) 2번풀이

function solution(X, Y) {
  //X 요소들 배열에 넣기
  const obj1 = {};
  for (let i = 0; i < X.length; i++) {
    obj1[X[i]] ? (obj1[X[i]] += 1) : (obj1[X[i]] = 1);
  }
  //요소들 비교해서 있으면 temp배열에 채우기
  const temparr = [];
  for (let j = 0; j < Y.length; j++) {
    if (obj1[Y[j]]) {
      obj1[Y[j]] -= 1;
      temparr.push(Y[j]);
    }
  }
  const answer = temparr.sort((a, b) => b - a).join("");
  return answer[0] == 0 ? "0" : answer ? answer : "-1";
}

시간복잡도 O(n)을 만들기 위해 객체 이용

6. 콜라 문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

function solution(a, b, n) {
  var answer = 0;
  let maxGiv = 0;
  while (a <= n) {
    maxGiv = ~~(n / a);
    answer += maxGiv * b;
    n = n - maxGiv * (a - b);
  }
  return answer;
}

 

728x90
반응형

'개발 > 알고리즘' 카테고리의 다른 글

[알고리즘] 배열 안의 요소 비교  (1) 2022.11.02
[알고리즘] 알고리즘 문제 풀이 순서  (0) 2022.11.02
[코딩테스트] 프로그래머스 문제 모음  (0) 2022.10.11
[코딩테스트] 프로그래머스 문제  (0) 2022.09.29
[BigO] 객체와 배열  (1) 2022.09.29
'개발/알고리즘' 카테고리의 다른 글
  • [알고리즘] 배열 안의 요소 비교
  • [알고리즘] 알고리즘 문제 풀이 순서
  • [코딩테스트] 프로그래머스 문제 모음
  • [코딩테스트] 프로그래머스 문제
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    컨테이너
    30일챌린지
    js
    블록체인
    go언어
    nodejs
    React
    node.js
    node
    erc20
    30일 챌린지
    명령어
    ERC721
    CSS
    go
    mysql
    도커
    html
    하이퍼레저
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[코딩테스트] 프로그래머스 문제모음
상단으로

티스토리툴바