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

2022. 9. 28. 09:40·개발/알고리즘
728x90
반응형

1. 같은 숫자는 싫어

 

프로그래머스

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

programmers.co.kr

(1) 1번 풀이

function solution(arr) {
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] == arr[i + 1]) {
      arr.splice(i, 1);
      i--;
    }
  }
  return arr;
}

효율성 테스트 시간초과

splice로 계속 접근해서 시간이 더 걸린것같다.

(2) 2번 풀이

function solution(arr) {
  let answer = [];
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] != arr[i + 1]) {
      answer.push(arr[i]);
    }
  }
  return answer;
}

(3) 다른사람 풀이 본 후

function solution(arr) {
  return arr.filter((val, index) => val != arr[index + 1]);
}

filter 메서드를 사용함

 

2. 숫자의 표현

 

프로그래머스

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

programmers.co.kr

function solution(n) {
  var answer = 1;
  const startNum = Math.ceil(n / 2);
  for (let i = startNum; i > 0; i--) {
    let temp = i;
    for (let j = i - 1; j > 0; j--) {
      temp += j;
      if (temp == n) {
        answer += 1;
      } else if (temp > n) {
        break;
      }
    }
  }
  return answer;
}

3. 피보나치 수

 

프로그래머스

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

programmers.co.kr

function solution(n) {
  let answer = [0, 1];
  for (let i = 2; i <= n; i++) {
    answer[i] = BigInt(BigInt(answer[i - 1]) + BigInt(answer[i - 2]));
  }
  return answer[n] % BigInt(1234567);
}

처음에 재귀로 시도 했다가 런타임 오류

그리고 BigInt 없이 풀었는데 계속 실패

실패한 이유를 고민하다가 재귀로 실패한 지점에서 계속 실패하길래 number최댓값을 초과한 값이 나온다고 생각

구글링해서 BigInt를 알게됐고 이건 수의 제한이 없다는 것을 알았다.

 

4. 이상한 문자 만들기

 

프로그래머스

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

programmers.co.kr

(1) 1번 풀이

function solution(s) {
  var answer = [];
  s.split(" ").reduce((acc, cur) => {
    for (let i = 0; i < cur.length; i++) {
      if (i % 2) {
        cur =
          cur.substring(0, i) +
          cur.charAt(i).toLowerCase() +
          cur.substring(i + 1);
      } else {
        cur =
          cur.substring(0, i) +
          cur.charAt(i).toUpperCase() +
          cur.substring(i + 1);
      }
    }
    answer.push(cur);
  }, "");

  return answer.join(" ");
}

(2) 2번풀이

function solution(s) {
  var answer = [];
  s.split(" ").reduce((acc, cur) => {
    let temp = "";
    for (let i = 0; i < cur.length; i++) {
      if (i % 2) {
        temp += cur[i].toLowerCase();
      } else {
        temp += cur[i].toUpperCase();
      }
    }
    answer.push(temp);
  }, "");

  return answer.join(" ");
}

1번풀이를 좀더 가독성 좋게 해봤다.

(3) 다른 사람 풀이 본 후

function toWeirdCase(s) {
  return s.toUpperCase().replace(/(\w)(\w)/g, function (a) {
    return a[0].toUpperCase() + a[1].toLowerCase();
  });
}

replace에서 두번째 파라미터로 콜백을 넣어줄수 있다는 것을 알게 됐다.

콜백의 매개변수로는 첫번째 매개변수에 만족하는 값이 들어간다.

 

5. 3진법 뒤집기

 

프로그래머스

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

programmers.co.kr

(1) 1번 풀이

function solution(n) {
  var answer;
  answer = n.toString(3).split("").reverse().join("");

  return +parseInt(answer, 3).toString(10);
}

(2) 다른사람 풀이 본 후

function solution(n) {
  var answer;
  answer = parseInt(n.toString(3).split("").reverse().join(""), 3);

  return answer;
}

parseInt의 뒤에 진수를 입력하면 10진수 number형으로 반환해준다 좀더 간단하게 바꿈

 

6. 예산

 

프로그래머스

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

programmers.co.kr

function solution(d, budget) {
  var answer = 0;
  d = d.sort((a, b) => a - b);
  let temp = 0;
  for (const value of d) {
    temp += value;
    if (temp > budget) {
      break;
    }
    answer += 1;
  }
  return answer;
}

 

7. 다음 큰 숫자

 

프로그래머스

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

programmers.co.kr

(1) 풀이

function solution(n) {
  const biN = n.toString(2).split("");
  let numN = 0;
  for (const val of biN) {
    numN += +val ? 1 : 0;
  }

  let i = 1;
  while (true) {
    const temp = (n + i).toString(2).split("");
    let tempNum = 0;
    for (const val of temp) {
      tempNum += +val ? 1 : 0;
    }

    if (tempNum == numN) {
      return n + i;
    }

    i++;
  }
}

(2) 다른사람 풀이 본 후

function solution(n, a = n + 1) {
  return n.toString(2).match(/1/g).length == a.toString(2).match(/1/g).length
    ? a
    : solution(n, a + 1);
}

match를 이용해서 훨씬 가독성 좋은 코드가 됐다.

 

8. 카펫

 

프로그래머스

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

programmers.co.kr

(1) 1번풀이

function solution(brown, yellow) {
  const total = brown + yellow;
  for (let i = brown / 2 - 1; i > 0; i--) {
    for (let k = i; k > 0; k--) {
      if (i * k == total && (i - 2) * (k - 2) == yellow) {
        return [i, k];
      }
    }
  }
}

(2) 2번풀이

function solution(brown, yellow) {
  const total = brown + yellow;
  for (let i = brown / 2 - 1; i > 0; i--) {
    if (total % i == 0 && (i - 2) * (total / i - 2) == yellow) {
      return [i, total / i];
    }
  }
}

2중 for문을 없애기 위해 코드를 다시 짜봤다.

728x90
반응형

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

[코딩테스트] 프로그래머스 문제  (0) 2022.09.29
[BigO] 객체와 배열  (1) 2022.09.29
[코딩테스트] 올바른 괄호  (0) 2022.09.28
[BigO] BigO 표기법  (0) 2022.09.26
[코딩테스트] 최대공약수와 최소공배수  (1) 2022.09.20
'개발/알고리즘' 카테고리의 다른 글
  • [코딩테스트] 프로그래머스 문제
  • [BigO] 객체와 배열
  • [코딩테스트] 올바른 괄호
  • [BigO] BigO 표기법
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
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바