반응형
전체 글

전체 글

    [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에 어떤 값도 없다면 문제의 조건대..

    [LeetCode] 36번 문제 - Valid Sudoku

    문제 36. Valid Sudoku 문제 설명 수도쿠가 유효한지 확인하는 문제 수도쿠가 유효한지 확인하려면 행, 열, 3*3 묶음에 모두 중복되는 숫자가 없어야 한다. 나는 이를 처리하기 위해 .을 제외한 숫자들을 Set에 넣어 개수를 비교하는 isValidColumn 함수를 만들었다. isValidColumn 는 9개의 한 묶음을 비교하기 위한 것이기 때문에 배열 9개 묶음이 있어야 한다. 행은 원래 그대로 비교하면 되기 때문에 그대로 비교하고, 열과 3*3은 배열 묶음으로 만들기 위해 rotateMatrix, extractMatrix 함수를 만들었다. 마지막으로 모든 결과가 true이면 true이도록 every 메소드를 사용했다. 성공 코드 const isValidSudoku = (board) => ..

    [LeetCode] 1번 문제 - Two Sum

    문제 1. Two Sum 문제 설명 배열의 두 수를 더해 타겟의 수가 나오도록 하는 위치를 배열로 반환하는 문제 처음에는 이중 반복문을 사용해 두 수를 더한 값이 타겟 값이 나오면 해당 값의 인덱스를 배열로 묶어 반환하도록 풀었다. 더 간단한 풀이가 있을 것 같아서 솔루션을 참고해 Map을 사용했다. 먼저 빈 Map을 만든다. 반복문을 돌면서 현재 배열의 값을 타겟 값에 뺀 값이 Map에 있는지 확인한다. 값이 Map에 있으면 해당 수의 index 값(value)과 현재 index를 배열로 반환한다. 값이 Map에 없으면 현재 값과 인덱스를 Map에 추가한다. 성공 코드 const twoSum = (nums, target) => { let map = new Map(); for (let i = 0; i <..