반응형

Problem Solved/Programmers

    [Programmers][Javascript] 124 나라의 숫자

    문제 124 나라의 숫자 문제 설명 10진수를 문제만의 규칙인 124진법으로 변환시키는 문제 parameter로 들어온 숫자가 0보다 클 때 동안 while문을 돌면서 124진수로 변환을 한다. 1, 2, 4라는 3개의 수로 바꾸는 것이기 때문에 원래의 10진수에서 몫과 나머지가 필요하다. 몫은 처음에 parameter인 n으로 다시 저장되어 while문을 벗어나는 수가 될 수 있게 해 준다. 나머지는 restNum이라는 나머지 저장 변수에 저장해 124진수를 만드는 데에 사용한다. 몫과 나머지를 2에서 구했으니 이것을 바탕으로 2진수를 구하는 방법과 비슷하게 3을 나눠서 답을 구해 보았다. 나머지가 0일 때는 4로 치환했다. 어라? 답이 4가 아닌 14로 나온다. 아래는 푼 과정을 그린 것이다. 여기서..

    [Programmers][Javascript] 12903번 - 가운데 글자 가져오기

    문제 [Programmers][Javascript] 12903번 - 가운데 글자 가져오기 문제 설명 글자 개수에 따라 다른 개수의 가운데 글자를 가져와 반환하는 문제 string의 길이가 홀수이면 가운데 한 글자만 반환해야 하고, 짝수이면 가운데 두 글자를 반환해야 한다. length를 2로 나눠서 중간값을 구한 후 if문을 사용해 substring으로 문자열을 뽑아냈다. 다른 사람 코드를 보니 substring을 사용하지 않고 string의 index로 가운데 글자를 뽑은 것을 볼 수 있었다. 머리 환기시킬 겸 풀어 봤다. 성공 코드 내 코드 const solution = s => { const middleIndex = Math.floor(s.length / 2); let answer = ""; if ..

    [Programmers][Javascript] 가장 큰 수

    문제 [Programmers][Javascript] 가장 큰 수 문제 설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내는 문제 나는 처음에 sort하는 것을 값들을 10으로 나눈 나머지 값들로 하려고 했다. 근데 그러면 예제 테스트는 통과하지만 전체 예제는 통과하지 못한다. 테스트 케이스를 잘 생각하지 못하겠어서 다른 블로그를 참고했다. 그래서 나온 방법이 앞뒤의 수를 문자열로 더해 수를 비교하는 것이다. 30과 3을 문자열로 더하면 303과 330이 나오게 된다. 이 두 수를 비교해 큰 수대로 정렬한다는 것이다. 자바스크립트에서 숫자에서 문자로 바꾸는 형변환이 숫자 + ''로도 할 수 있어서 map을 이용해 바꿔줄 수 있다. 그리고 마지막으로 ..

    [Programmers][Javascript] K번째수

    문제 [Programmers][Javascript] K번째수 문제 설명 배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하는 문제 commands 배열에 조건이 다 들어있다. commands 배열 하나마다 slice 시작, 끝, 정렬 후 인덱스 위치까지 제공되어 있다. 단, 문제에서 말하는 인덱스와 배열에서 쓰이는 인덱스가 다르니 주의해야 한다. 나는 최대한 고차함수로 풀어보려고 했다. 근데 역시 forEach 말고 map으로도 충분히 가능했다. 성공 코드 1번은 내 풀이이고, 2번은 다른사람 풀이이다. 성공 코드 function solution(array, commands) { var answer = []; commands.forEach(element => ..

    [프로그래머스][Javascript] 문자열 압축

    문제 [프로그래머스][Javascript] 문자열 압축 문제 설명 가장 압축이 작게 된 길이 찾기 처음에 너무 복잡하게 나누고 배열에 계속 저장하는 식으로 하다가 계속 값이 제대로 배열에 저장이 안되는 문제가 생겨 테스트케이스를 모두 다 통과하지 못하는 문제가 생겼다. 블로그를 참고해 조금 간단하게 수정했더니 바로 작동하는 코드가 되었다. 참고 블로그 : [javascript] 프로그래머스/문자열 압축 문제.. 문자열을 n의 길이씩 자르는 것도 배열에 저장하는 makeSplit이라는 함수가 있었는데, 배열로 저장하는 과정을 삭제하는 대신 currWord와 nextWord에 자른 값을 그때그때 저장하며 바로 비교할 수 있도록 바꿨다. 그리고 처음에는 count를 저장하는 배열과 중복되지 않은 문자열을 따로..

    [프로그래머스][Javascript] 완주하지 못한 선수

    [프로그래머스][Javascript] 완주하지 못한 선수

    문제 프로그래머스 해시 문제 - 완주하지 못한 선수 문제 설명 참가한 선수 : n+1명 완주한 선수 : n명 1. 정렬하기 너무 어렵게 생각해서 휘황찬란한 코드가 되어버린 문제. 하지만 단순 for문이나 foreach문을 쓰게 된다면 시간초과로 효율성 검사를 실패하게 된다. 그래서 생각을 하다가 정렬을 해서 값이 다르면 완주하지 못한 선수가 나오겠다는 생각을 했다. 그런데 시간복잡도 생각을 너무 많이 했더니 정렬을 퀵소트로 했다. 퀵소트 평균 Big o가 O(nlogn) 정도이니 빨라질거라 생각을 했는데, 생각해보니 반복하며 배열 값을 비교할 때는 최악의 경우 O(n)의 복잡도가 나오게 된다. 퀵소트를 쓰나 그냥 소트를 쓰나 최종 복잡도 차이는 없었던 것이다. 참고로 퀵소트는 하나의 리스트를 피벗(piv..