반응형
전체 글

전체 글

    [HackerRank][Javascript] Sherlock and the Valid String

    [HackerRank][Javascript] Sherlock and the Valid String

    문제 - Sherlock and the Valid String 문제 설명 1개를 지웠을 때 anagram을 만들 수 있는 조건을 충족하는지 판별하는 문제 Map을 2개를 만들어 개수로 판별하도록 했다. cMap: 문자열이 몇 개씩 있는지를 저장하는 Map이다. fMap: cMap에서 value들이 개수가 얼마나 되는지를 저장하는 Map이다. 이 Map을 활용해 문자열 삭제 여부를 판단한다. dCnt: 삭제된 개수를 세는 변수이다. 반복문에서 판별할 때 쓰이며, 처음 한 번만 조건을 충족하게 하기 위해 쓰인다. 반복문을 통해 입력값인 s로 cMap에 개수를 저장한다. 반복문을 통해 cMap에서 value들의 개수를 fMap에 저장한다. 만약 처음에 입력값이 모두 같은 문자가 들어온다면 YES를 반환해 아래..

    [HackerRank][Javascript] Alternating Characters

    [HackerRank][Javascript] Alternating Characters

    문제 - Alternating Characters 문제 설명 한 문자가 연속으로 등장하게 하지 않기 위해 삭제해야 하는 문자의 개수를 구하는 문제 반복문을 돌면서 현재 문자와 다음 문자가 같으면 결과값에 1을 더해 주고 결과값을 반환하면 된다. 참고: 자바스크립트에서는 문자열도 일종의 배열이기 때문에 length나 값 참조는 배열과 똑같이 할 수 있다. charAt같은 메소드를 추가로 사용하지 않아도 되서 편하다. 성공 코드 function alternatingCharacters(s) { let result = 0; for (let i = 0; i < s.length - 1; i++) { if (s[i] === s[i + 1]) result++; } return result; }

    [HackerRank][Javascript] Strings: Making Anagrams

    [HackerRank][Javascript] Strings: Making Anagrams

    문제 - Strings: Making Anagrams 문제 설명 문자열 a와 b에서 최소 몇 개의 글자를 삭제해야 애나그램이 완성되는지 구하는 문제 처음에 문자열 a, b의 길이가 같다고 생각했는데, 같지 않아서 다르게 풀었었다. 문자열 a, b를 split하여 배열로 만들어 각각 저장한다. 이중 반복문을 a, b의 길이만큼 역순으로 돈다. 여기서 역순으로 반복문을 돌린 이유는 배열의 요소를 삭제하면서 반복시킬 것이기 때문이다. 이중 반복문을 도는 이유는 a와 b의 길이가 다르고, 같다고 하여도 같은 인덱스에 같은 문자열이 있을지 알 수 없기 때문이다. 배열 a, b에서 같은 요소가 있으면 각각 배열에서 splice를 통해 삭제한다. 여기서 다른 것이 아닌 같은 것을 삭제하는 이유는 앞에서는 다른 것이라..

    [HackerRank][Javascript] Frequency Queries

    [HackerRank][Javascript] Frequency Queries

    문제 - Frequency Queries 문제 설명 타입과 값이 넘어오는 이중 배열에서 type 3일 때의 빈도수 TF 값을 구하는 문제 처음에 문제를 이해하지 못하고 설명을 듣고 이해했다. 문제를 더 꼼꼼하게 읽어야겠다. 풀이 설명을 듣고 기억에 남아서 그대로 풀었다. value의 개수를 저장하기 위한 map과 최종적으로 반환하기 위한 빈 배열을 생성한다. queries로 반복문을 돌며 타입을 체크하고 switch문을 돈다. 타입이 1이면 map에 값을 저장한다. 타입이 2이면 map에서 1을 빼 주어 삭제한다. 타입이 3이면 value들 중에 일치하는 것이 있는지 확인해 값을 배열에 담는다. 반복문이 끝나고 나온 result를 반환한다. 성공 코드 function freqQuery(queries) {..

    [HackerRank][Javscript] Map - Count Triplets

    [HackerRank][Javscript] Map - Count Triplets

    문제 - Count Triplets 문제 설명 배열 안에서 연속해서 등장하는 r의 n제곱 3개의 숫자가 몇 쌍이 되는지 구하는 문제 문제 접근하기가 어려워서 파이썬으로 간단하게 푸신 분의 풀이를 참고했다. 풀이 설명은 아래 블로그를 참고하면 되고, 나는 그 풀이를 어떻게 이해했는지 작성해 보겠다. 아래는 arr: 1 2 2 4, r: 2일 때 풀이의 Map 변화 상황이다. m2: Map { 2 => 1 } m3: Map {} // 0 m2: Map { 2 => 1, 4 => 1 } m3: Map { 4 => 1 } // 1 m2: Map { 2 => 1, 4 => 2 } m3: Map { 4 => 2 } // 3 m2: Map { 2 => 1, 4 => 2, 8 => 1 } m3: Map { 4 => 2..

    [HackerRank][Javascript] Sherlock and Anagrams

    [HackerRank][Javascript] Sherlock and Anagrams

    문제 - Sherlock and Anagrams 문제 설명 입력된 문자열에서 발생하는 모든 Anagram의 수를 반환하는 문제 이 문제는 Map을 쓰지 않고 풀었다가 한참을 고생한 문제이다. Map의 성능을 체감하게 된 문제이다. 일반 배열로 풀게 되면 time limit이 더 많이 걸리게 되는 것 같다. 우선 반복문을 돌리기 위해 입력된 문자열을 배열로 만든다. 자른 문자열의 개수를 저장하기 위해 Map을 새로 선언한다. makeSubList는 len이라는 인자를 받아 해당 숫자만큼 자르고 정렬해 개수를 앞서 만든 Map에 저장한다. 이 때, makeSubList가 reduce 안에서 불려서 바로 계산되기 때문에 함수 시작 부분에서 .clear()를 통해 Map을 비워준다. isAnagram에서는 ma..

    [HackerRank][Javascript] Two Strings

    문제 - Two Strings 설명 두 개의 문자 사이에 같은 문자열이 존재하는지 판별하는 문제 첫번째 풀이 Map을 2개를 사용한다. 1개는 s1을 저장하기 위해 쓰이고, 1개는 true, false 값을 저장하기 위해 쓰인다. s1 리스트가 반복문을 돌면서 맵에 개수가 저장된다. s2 리스트로 s1 문자열 중에 같은 문자열이 존재하는지 판단해 Map에 저장하며 반복한다. 마지막 반환할 때 mapOfResult에 true가 있는지를 some 메소드를 통해 판별한다. 하지만, Map을 두 개나 만들고 불필요하게 반복문을 돌게 되는 것 같아 스터디에서 알게 된 내용으로 다시 풀어 보았다. 두번째 풀이 Set에 s1을 저장한다. 여기서 처음 알게 된 사실은 Set에는 String이 들어가도 하나씩 배열로 바..

    [HackerRank][Javascript] Hash Tables: Ransom Note

    문제 Hash Tables: Ransom Note 문제 설명 magazine에 note의 모든 단어가 포함되어 있는지 확인하는 문제 Map과 every를 사용해 풀 수 있었다. Map에는 magazine을 반복문을 돌면서 단어의 개수를 저장한다. 그리고 note를 every 반복문을 돌면서 Map의 value가 undefined 또는 0이 아닐 경우에 false를 반환하게 만든다. 이 문제에서는 1개만 false여도 false이기 때문에 every를 사용하면 추가적인 변수를 사용하지 않고 풀 수 있다. 성공 코드 function checkMagazine(magazine, note) { let mapOfMagazine = new Map(); magazine.forEach((value) => { if (!m..

    [React] 환경설정 제대로 알고 하기 (without CRA) ①

    [React] 환경설정 제대로 알고 하기 (without CRA) ①

    [React] 환경설정 제대로 알고 하기 (without CRA) ① CRA(create-react-app)은 강력하고 편리하지만, 환경설정을 커스텀해서 사용하다가 전체가 어그러지는 상황이 올 수 있어 어렵습니다. 이번 포스팅에서는 초심자로서 CRA를 사용하지 않고 환경 설정하는 방법을 개괄적으로 설명하려고 합니다. 참고: 함수형 컴포넌트 기반으로 구성되었습니다. 2편 보기 : https://egg-programmer.tistory.com/280 참고한 환경설정 처음 환경설정을 시작할 때는 아래에 잘 정리된 설정을 따라 해 보면서 완성했습니다. 한번 잘 동작하는 것을 만들어 두면 다른 프로젝트에서는 조건에 맞게 가감할 수 있다고 생각합니다. 참고한 환경설정을 바탕으로 이해하고 쓰는 저만의 boilerpl..

    [리뷰] 팀 개발을 위한 Git∙GitHub 시작하기

    [리뷰] 팀 개발을 위한 Git∙GitHub 시작하기

    [리뷰] 팀 개발을 위한 Git∙GitHub 시작하기 책의 구성 책은 크게 3가지 단계로 나뉘어져 있다. GUI로도 명령어들을 실행할 수 있기 때문에 각자 상황에 맞는 원하는 단계를 골라서 공부할 수 있는 점이 가장 좋다. GitHub 시작하기 GUI로 GitHub 사용법 익히기 CLI로 GitHub 사용법 익히기 리뷰 이 책은 GitHub를 처음 시작하는 사람이 봐도 좋다. 그리고 어느 정도 기본 명령어(add, commit, push)를 사용할 줄 아는 사람이 봐도 좋다. GitHub를 시작하는 방법부터 명령어의 의미까지 재미있게 실습해 볼 수 있기 때문이다. 나 같은 경우에는 기본적으로 CLI를 사용하고 있었기 때문에 뒤쪽에서 유용한 명령어와 명령어의 의미를 찾아보며 공부했다. 그리고 실습 위주로 ..

    Shell Script 명령어 정리

    Shell Script Shell Script 명령어 정리 기본 명령어 명령어 설명 pwd 현재 경로 출력 ls 현재 디렉토리에서의 파일 리스트 출력 ls -l 접근권한, 생성시간을 포함한 파일 상세 리스트 출력 mkdir [directory name] 새로운 디렉토리 생성 cd cd ./ cd ../ cd [path] home 디렉토리로 이동 현재 디렉토리로 이동 바로 이전 디렉토리로 이동 설정한 경로 디렉토리로 이동 cat test.txt test.txt의 내용 출력 history [n] 지금까지 입력한 명령어 목록 출력 숫자를 정해 최근 n개의 명령어만 출력하게 할 수도 있다. cp filename1 directory 파일 복사 mv 파일 이동 rm 파일 삭제 디렉토리 삭제 시, -r 옵션 부여 f..

    [HackerRank][Javascript] Array - Minimum Swaps 2

    문제 Minimum Swaps 2 실패한 풀이 설명 원래의 배열에서 가장 작은 횟수로 바꾼 수를 찾는 문제. 아주 골치아픈 문제다. 재귀로는 절대 풀 수 없다. 그렇다고 재귀가 아닌 반복문을 쓴다고 풀리는 것도 아니다. 위의 실패한 풀이 두 개 모두 시간초과로 실패했다. swap을 하지 않고 풀어야 풀리는 문제인 것 같다. 심지어 이전에 솔루션이라고 올라온 풀이들도 현재는 통과하지 않았다. 문제가 더 엄격해 진 것 같다. 실패 2번 풀이는 왜 실패인지 아직도 잘 모르겠다. 반복문을 한 번만 도는데도 swap해 주는 곳에서 시간을 더 많이 쓰게 되는 것일까? 밑에 성공한 다른 풀이를 분석하여 이해해 보도록 하겠다. 실패한 풀이 1 function swaploop(arr, result) { if (arr =..

    [HackerRank][Javascript] Array - New Year Chaos

    문제 New Year Chaos 문제 설명 놀이기구를 기다리는 줄에서 뇌물이 최소 몇 번 오갔는지 구하는 문제. (단, 한 사람이 뇌물을 3번 이상 준 경우는 Too chaotic을 결과로 해야 한다.) 문제 이해가 어려워 솔루션을 찾아보고 이해하는 방식을 택했다. 입력값은 뇌물로 인해 순서가 뒤섞인 배열이고, 출력값은 숫자 또는 문자열이다. 우선 뇌물을 주고받았는지를 찾기 위해 q의 길이만큼 반복문을 돈다. 한 사람이 뇌물을 3번 이상 줬다면 자신의 원래 위치보다 3 이상 앞에 있을 것이다. 이것을 바탕으로 q[i]는 현재 위치, i + 1은 원래 위치로 두고 3 이상이면 Too chaotic을 반환하도록 한다. 카오식하지 않다면 현재 위치보다 1 또는 2 작은 위치에서 뇌물을 주고받은 사람이 있는지 ..

    [HackerRank][Javascript] Arrays: Left Rotation

    문제 Arrays: Left Rotation 문제 설명 1차원 배열이 전해진 숫자만큼 오른쪽으로 회전하도록 만드는 문제. leetcode의 rotate array 문제보다 덜 까다로운 문제이다. leetcode에서는 추가 메모리를 사용하면 안됐기 때문에 하나씩 떼어서 붙여주는 방식을 택했다. 이번 문제는 splice를 시켜 바로 concat으로 붙여 주어 간단하게 해결했다. 단, 문제의 입력값 중에 d가 a의 길이보다 크다면 나머지 값으로 계산하는 등의 예외 처리는 해 주면 더 좋을 것 같다. 일단 나는 통과과 되어서 따로 해 주지는 않았다. 성공 코드 const rotLeft = (a, d) => a.concat(a.splice(0, d));

    [HackerRank][Javascript] 2D Array - DS

    문제 2D Array - DS 문제 설명 2차원 6 * 6 배열에서 나올 수 있는 모래시계 중에서 가장 큰 합을 구하는 문제 6 * 6 배열에서 모래시계는 4 * 4 = 16개가 나온다. 모든 모래시계의 합을 구하기 위해 이중 반복문을 이중 배열보다 2보다 작은 길이만큼 돌 수 있게 한다. 이중 반복문 안에서 모래시계의 합을 구해 result보다 크면 result에 저장시키고 반복문이 끝나면 반환한다. 성공 코드 function hourglassSum(arr) { let result = -100; for (let i = 0; i < arr.length - 2; i++) { for (let j = 0; j < arr.length - 2; j++) { let sum = arr[i + 1][j + 1]; fo..