Dorito
'알고리즘' 카테고리의 글 목록

알고리즘

알고리즘/프로그래머스

[프로그래머스 Lv.3] 여행경로: JavaScript 알고리즘 풀이 with DFS (Feat. 얕복 깊복 이슈)

들어가며요즘 알고리즘, 자료구조를 열심히 공부하고 있는데 그중 DFS/BFS 문제를 집중적으로 공략하고 있습니다. 아직 제가 재귀함수에 익숙하지 않기도 하고, 또 해당 문제는 사실 일반적인 DFS 문제이기는 한데, 얕복 깊복 개념 고려 안하고 막 풀었다가 예상과 다른 결과가 나와서 당황하게 되었던 문제입니다. 해당 이슈를 겪었던게 인상깊고 재밌어서 해당 문제 풀이를 포스팅하게 되었습니다.풀이코딩테스트 연습 - 여행경로 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr로직 설명 사용한 티켓이거나 출발지가 다..

알고리즘/SQL

ARM 맥북과 호환되지않는 버전의 mySQL을 docker-compose 로 설치 및 실행하는 방법

목표: docker-compose.yml 을 작성하여 OS 와 호환되지 않는 MySQL 구버전을 설치하고 mySQL 에서 user 계정을 관리할 수 있습니다. 들어가며 최신 버전 mySQL 의 경우에는 ARM 칩셋을 지원하기 때문에 docker pull 기능을 사용해서 쉽게 도커로 mySQL 을 실행시킬 수 있지만 애플 실리콘 칩셋 버전과 호환되지 않는 구버전인 경우 그렇게 해도 제대로 실행되지 않는 문제가 있습니다. 저같은 경우에는 M2 맥북으로 Live 서버의 버전과 맞추어서 개발을 진행해야하는데, 라이브 서버에서 사용하는 mySQL 버전이 5.7 구버전이라 곤란했던 적이 있었습니다. 그래서 유저의 실행 환경에 구애받지 않고 낮은 버전의 mySQL 을 실행할 수 있도록 docker-compose 를 ..

알고리즘/프로그래머스

[프로그래머스 Lv. 2] 다음 큰 숫자 - 비트연산자 사용한 시간 복잡도 O(1) JavaScript 풀이

코딩테스트 연습 - 다음 큰 숫자 | 프로그래머스 스쿨 (programmers.co.kr) n은 1,000,000 이하의 자연수 풀이 Time Complexity: O(1) Auxiliary Space: O(1) 아이디어: 오른쪽 대부분의 비트(LSB, Least Significant Bit)는 왼쪽 대부분의 비트보다 빠르게 변화함 이 아이디어는 x에서 1의 가장 오른쪽 문자열을 찾고 패턴의 가장 왼쪽 비트를 제외한 오른쪽 극단으로 패턴을 이동함. 패턴에서 가장 왼쪽에 있는 비트(누락된 비트)를 x의 왼쪽 부분으로 한 위치씩 이동함 상세 설명 해당 추가 테스트 케이스들을 보자. 더 힌트를 얻어보자면.. 여기서 규칙을 발견할 수 있다. 가장 오른쪽에 있는 1 뭉치들에 대해서 일정한 패턴이 보인다. 혹은 논..

알고리즘/프로그래머스

[프로그래머스 Lv.2] 영어 끝말잇기 JavaScript 풀이

코딩테스트 연습 - 영어 끝말잇기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr HashSet 사용 시간 복잡도 O(n) 설명) 1. && 연산자는 순서대로 판별하기 때문에 if 문 내 i > 0 조건이 뒤로 배치된다면 오류남 2. string 마지막 글자 가져오는 법) 총 길이 - 1 인덱스로 가져오거나 아니면 slice(-1) 로 가져올 수 있음 3. 조건 대로 분기점 처리 잘 해주면 됨 4. 문제에서 원하는 답을 계산하는 간단한 규칙 알면 됨

알고리즘/프로그래머스

[프로그래머스 Lv 2] 행렬의 곱셈 JavaScript 풀이

코딩테스트 연습 - 행렬의 곱셈 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 행렬의 곱셈, 행렬의 거듭제곱 – 수학방 (mathbang.net) [0]을 하는 이유는 두 번째 행렬 각 행의 길이 만큼 반복하기 위함 저렇게 안하면 코드는 첫 번째 행렬의 길이만큼 반복함 ⇨ 이 경우, n * n 행렬끼리 곱하는 경우에만 적용이 됨 ⇨ (3x2)*(2x3)이면 두 번째 행렬[3]은 없기 때문에 에러 뜸 소소하게 재미있는 포인트 행렬 곱셈은 6중 포문 쓰면 제일 연산 속도가 빠름 Putting Your ..

알고리즘/SQL-1

[리트코드 SQL Medium] 178. Rank Scores

Rank Scores - LeetCode SELECT score, DENSE_RANK() OVER (order by score DESC) as 'rank' FROM Scores; DENSE_RANK() 는 함수이기때문에, 컬럼 alias 를 쓰고 싶을 경우 문자열로 지정해줘야 한다. * SQL 윈도우 함수에 대해서 더 복습하기

알고리즘/리트코드

[리트코드 Medium] 1680. Concatenation of Consecutive Binary Numbers JavaScript 풀이

새로 배운 것: 2진법 변환은 생각보다 까다롭다 (숫자 메모리 저장 방식) 처음에는 1~n까지 숫자 만들어서 각 요소마다 2진법으로 바꾸고 조인 시키면 안되나 라고 생각했는데 안된다. 값이 작으면 답대로 나오는데 한 n = 20부터 값이 이상하게 나오고 n 엣지포인트 찍으면 NaN 뜸) JavaScript data types and data structures - JavaScript | MDN (mozilla.org) 문서를 보면 Number According to the ECMAScript standard, there is only one number type: the double-precision 64-bit binary format IEEE 754 value 64비트까지 수 표현이 가능하다고 한다...

알고리즘/프로그래머스

[프로그래머스 Lv 2] 카펫 JavaScript 풀이

코딩테스트 연습 - 카펫 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr - 로직 설명 1. yellow 의 약수들을 구해준다. 이때 효율적인 연산을 위해서 yellow 의 제곱근의 정수까지만 구해준다. (1~ yellow 끝까지 순회할 필요없다) → 추가적으로 설명하자면, 약수가 n * m 인 형태임을 기억하자. 약분을 구하기 위해서 n * m 을 진행할수록 n은 커지고, m 값은 작아짐 예를 들어 설명해보자면 24의 약수를 구할 경우 4² < 24 < 5² 이다. x * x 제곱근 (x = 4) ..

알고리즘/프로그래머스

[프로그래머스 Lv 2] JadenCase 문자열 만들기 JavaScript 풀이

8번 테케 에러 해결: 마지막 문자에 공백이 있는 경우 오류 떠서 if문으로 처리해줌 split 연산자 String.prototype.split() - JavaScript | MDN (mozilla.org) 메서드 특징 이용해서 풀이 Splitting with a RegExp to include parts of the separator in the result If separator is a regular expression that contains capturing parentheses ( ), matched results are included in the array. const myString = "Hello 1 word. Sentence number 2."; const splits = myStri..

알고리즘/프로그래머스

[프로그래머스 Lv 2] 기능개발 JavaScript 풀이 + 리팩토링 시도..

코딩테스트 연습 - 기능개발 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 1 로직 굉장히 이상한 것 같은데 어쨌든 테케 다 통과하긴 함 내가 생각한 로직 1. 필요한 일수를 구한다. 2. 큰수1 ____ 큰수2 ____ 이렇게 나눠서 보면 됨 개인적으로 보는 지금 코드 문제점 (이따가 더 생각해보거나 다른 사람 솔루션 보기) 1. mutable 하다 (count, stack, maxValue) → 관련 mutable한 코드는 왜 바람직하지 못한 코드인가 (tistory.com) 보면 좋음 2..