반응형
전체 글

전체 글

    [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..

    [HackerRank][Javascript] Repeated String

    문제 Repeated String 문제 설명 a라는 문자가 반복되는 횟수를 구하는 문제 처음에 문제를 제대로 읽지 못해 a가 아닌 가장 많은 횟수를 구하는 문제로 착각하고 풀어 헤맸다. 정규식을 활용해 기본 문자열에서의 a의 개수를 구한다. 몫과 나머지를 구하고, 몫을 위에서 구한 a의 개수와 더해준다. 나머지만큼 반복문을 돌면서 나머지에서 a이면 result를 1씩 더해 준다. 최종적인 result 값을 반환하면 정답이 나온다. 성공 코드 function repeatedString(s, n) { const aCount = (s.match(/a/g) || []).length; const quotient = Math.floor(n / s.length); const remainder = n % s.lengt..

    [HackerRank][Javscript] Counting Valleys

    문제 Counting Valleys 문제 설명 골짜기에 내려갔다가 도로 원래 위치로 올라오는 횟수를 구하는 문제 문제 조건 입력되는 문자열에서 U는 1씩 올라가는 것, D는 1씩 내려가는 것을 표현한다. 그림에 있는 평행선은 시작하는 지점, 즉 0을 의미한다. 시작 지점(0)에서 올라갔다가 내려와서 0이 되는 것은 count에 포함되지 않는다. 문제 조건을 따라 처음에는 U와 D를 조건문으로 나눠 1씩 더하거나 빼 주었다. count(풀이에서는 result)가 적용되기 위해서는 시작 지점에서 내려갔다가 올라와서 다시 0이 되어야 한다. 그러므로 U이면서 시작 지점일 때 count를 1씩 늘려 주면 답이 나온다. 성공 코드 function countingValleys(n, s) { const stringL..

    [HackerRank][Javascript] Jumping on the Clouds

    문제 Jumping on the Clouds 문제 설명 0만 건널 수 있는 구름이 가질 수 있는 최소 이동 횟수를 구하는 문제 실패한 풀이 설명 문제에서 건널 수 있는 구름의 조건은 한 번에 2개까지의 구름만 넘을 수 있다는 것과 1의 구름은 무조건 건너뛴다는 것이다. 첫 풀이가 실패한 이유는 두 개의 조건에서 건너뛴다의 조건을 코드로 적지 못해서이다. 조건을 나름대로 적었지만 건너뛰지 않고 동떨어진 jump라는 변수만 0~2 사이를 왔다갔다 하게 된다. 성공한 풀이 설명 if문의 늪에 빠져서 팀원들과 stackoverflow의 도움으로 문제를 다시 풀고 이해하려고 노력했다. 가장 중요한 것은 현재 수의 다다음 수를 검사해야 한다는 것이다. 바로 다음 수가 0인지 1인지 비교하고 0이어서 갔는데 거기서 ..

    [HackerRank][Javascript] Sock Merchant

    문제 Sock Merchant 문제 설명 짝이 맞는 양말의 개수를 구하는 문제 처음에 문제를 반대로 이해해서 짝이 안 되는 나머지 숫자를 구하는 것으로 이해해 헤맸다. map으로 숫자마다 양말의 개수를 저장해 2로 나눠 몫만 더하면 답이 나온다. for문을 돌면서 map에 개수를 차곡차곡 더한다. 그리고 reduce를 사용해 양말이 짝지어지는 개수를 구해서 계속 더한 값을 구한다. 성공 코드 function sockMerchant(n, ar) { let map = new Map(); for (let i = 0; i < n; i++) { // 분기처리 - if 문 사용 if (!map.has(ar[i])) { map.set(ar[i], 1); } else { map.set(ar[i], map.get(ar[..

    6월 1주차 주간회고 (6월 1일 ~ 6월 7일)

    잘한점 그래도 필수 요구사항을 거진 완성했다. oauth에 아쉬움이 많이 남아서 다음에는 꼭 oauth를 처음 혹은 중반부부터 할 수 있도록 의견을 내야겠다. 계속 해보고 싶었던 skeleton loading을 lazy loading과 곁들여 만들었다. 깃허브를 사용할 때 계속CUI를 사용했었는데, 페어 멤버가 소스트리를 잘 활용하는 것을 보고 소스트리로 커밋메시지를 써 봤는데 놀랍도록 커밋 메시지 쓰는 게 쉬워졌다. 명령어는 커맨드가 쉬운게 많아서 두 개를 혼용해서 사용해야겠다. 커밋을 더 잘게 나눌 때 요긴하게 쓰일 것 같다. 이번 주 중반부에 알고리즘 풀었던 것에 대한 설명을 써 봤는데 프로젝트 중간에 하니까 은근 재미있었다. 집에서 해도 나름 집중이 잘 됐다. 노트북의 문제인가..? 내가 잘 한 ..

    [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로 나온다. 아래는 푼 과정을 그린 것이다. 여기서..

    5월 4주차 주간회고 (5월 25일 ~ 5월 31일)

    잘한 점 페어로 계속해서 했다 월요일에 정한 계획을 모두 달성했다. redux를 사용할 때 devtool을 같이 볼 수 있게 했다. 신기하다. 근데 아직 sourcemap을 활용해서 디버깅하는 방법은 잘 모르겠다. 콘솔로 찍으면 원래 파일명과 라인으로 뜨긴 하는데 이거 말고 잘 쓰는 방법이 있을 것 같아서 고민을 계속 해 봐야겠다. 집에 있는 자전거를 30분씩 탔다(이틀 정도) 프로젝트 중간에 리팩토링을 조금이지만 했다. 근데 좀 더 생각하고 중복 줄이기 등을 생각해 봤어야 했다. 리뷰 영상을 보니 코드가 생각보다 끔찍하다 페어프로그래밍의 장점을 제대로 느낄 수 있었다. (제대로 페어해 본 게 이번이 처음인 듯 하다) 페어가 내가 이상한 데서 삽질하지 않도록(?) 이끌어 주는 것 같다. 아쉬운 점 페어가..

    5월 3주차 주간회고(5월 18일 ~ 5월 24일)

    잘한 점 페어 프로그래밍을 30분 단위로 나눠서 제대로 해봤다. 이론적인 부분(리덕스)을 계속 공부했다. 아쉬운 점 공부 거리인 리덕스에 대해 제대로 고민하지 않았다. 오늘 + 주말을 통해 리덕스 적용에 대해 고민해보려고 한다. 공부한 내용을 정리하지 않았다. 키워드만 잔뜩 적어 놨다. 리덕스에 대해 포스팅 하나 정도는 하고 싶은데 계속 조금씩만 정리했다. 이번주는 3주 중 1주여서 그런지 수박 겉핥기식으로 모든 것을 한 것 같다. 다음주에는 제대로 해보자

    [리뷰] 학교에서 알려주지 않는 17가지 실무 개발 기술 리뷰

    [리뷰] 학교에서 알려주지 않는 17가지 실무 개발 기술 리뷰

    학교에서 알려주지 않는 17가지 실무 개발 기술 리뷰 은 크게 소프트웨어, 데이터, 웹에 대한 기술을 주제로 삼고 있다. 나는 웹 기술에 관심이 있어서 집중적으로 읽고 리뷰를 쓰려고 한다. 전체 목차 소프트웨어를 지탱하는 기술 문자열 인코딩 다국어 처리 날짜와 시간 정규 표현식 범용 고유 식별자 난수 해시 함수 데이터 처리 기술 JSON YAML XML 프로토콜 버퍼 Base 64 데이터 압축(zlib) 웹을 지탱하는 기술 HTTP RESTful API HTTPS OAuth 2.0 중요하게 생각하지 않았던 기술들 나는 최근 프론트엔드 개발을 공부하고 있어서 한 번씩 들었던 단어들이 있었다. 특히 웹을 지탱하는 기술 파트를 나는 인상깊게 봤다. 웹에 있어서 꼭 알아야 하지만 깊게 살펴보지 않고 사용했던 개..

    [LeetCode] 125번 문제 - Valid Palindrome

    문제 125. Valid Palindrome 문제 설명 문자열의 영숫자가 회문인지 판별하는 문제 정규식을 활용해 영숫자만 배열로 저장한다. 이제 저장된 배열이 회문인지 확인하면 되는데, 들어온 문자열이 ".,"와 같은 경우 길이가 없다고 나오므로 if문을 통해 예외처리를 해준다. 이 때, 꼭 배열 자체를 비교할 필요는 없다. join을 활용해 문자열로 만들고, 그것을 뒤집은 값과 비교해도 된다. 여기서 나는 배열인 채로 비교했다. 그리고 전체 배열 크기의 반을 구한 다음에 그만큼만 반복문을 돌면서 값이 같은지 확인한다. 하나라도 다르면 false가 되어 결과로 반환하게 된다. 성공 코드 const isPalindrome = (s) => { const regex = /(\w)/g; const onlyAlp..

    [LeetCode] 242번 문제 - Valid Anagram

    문제 242. Valid Anagram 문제 설명 주어진 문자열이 유효한 anagram인지 아닌지 판별하는 문제 문자열의 길이와 알파벳 구성(개수)가 동일하면 true, 아니면 false를 반환하게끔 해야 한다. 처음에는 반복문을 돌게 해 값을 하나하나 비교해 참거짓을 반환했는데, 그냥 비교할 수 있는 방법이 있어서 그렇게 바꿔서 사용했다. 자바스크립트의 경우 배열 자체를 비교할 수 있는 메소드는 없지만 값을 json 문자열로 만들어 주는 *JSON.stringify 를 이용해 두 배열을 비교했다. 아니면 아예 join("") 을 사용해 문자열을 만들어 문자열끼리 비교해 줄 수도 있다. 성공 코드 const isAnagram = (s, t) => { if (s.length !== t.length) ret..

    [LeetCode] 387번 문제 - First Unique Character in a String

    문제 387번 문제 - First Unique Character in a String 문제 설명 주어진 문자열에서 첫 번째로 유일한 문자의 index를 찾아 반환하는 문제 중복되는 값을 저장하는 duplicateMap과 유일한 값을 저장하는 uniqueMap을 생성한다. 문자열을 배열로 변환해 반복문을 돌면서 uniqueMap 또는 duplicateMap에 해당 문자가 존재하는지 확인한다. 두 Map 중에 하나에 들어가 있다면 중복 문자라는 뜻이므로 uniqueMap에서 삭제해 준다. 두 Map 어디에도 들어있지 않다면 처음 나온 글자이거나 유일한 문자이므로 uniqueMap에 담는다. 반복문이 끝나고 uniqueMap의 첫 번째 글자를 리턴한다. 만약 uniqueMap에 어떤 값도 없다면 문제의 조건대..