역시 IT인에게 취업을 준비하기엔 알고리즘만한 것이 없지 않을까....가고싶은 회사는 전부 코딩테스트를 보기에....오늘도 알고리즘을 수없이 파는 닝겐....ㅠ..알고리즘을 풀면 풀 수록, 코딩 능력보다 문제 파악 능력이 더 중요하다고 생각 되어진다.어릴적에 책 좀 많
On. Algorithm 1. eval, map, split 2. chr, ord (아스키코드) 3. 여러개의 input 한줄로 입력받기 4. print formatting - % 5. 일, 십, 백의 자리 수 표현 방법 Off.
이전에 말을 안한 것 같은데, 참고로 나는 파이썬을 사용해서 알고리즘 풀이를 하고 있음. 얄루~윤년: 4의 배수면서 100의 배수아니고 400의 배수if는 크게 100으로 나누어 떨어지는지, 안떨어지는지로 나눈다.100으로 나누어 떨어지면, 다시 400으로 나누어 떨어
✔️ 곱셈 및 거듭제곱 연산으로 사용할 때✔️ 리스트형 컨테이너 타입의 데이터를 반복 확장하고자 할 때✔️ 가변인자 (Variadic Parameters)를 사용하고자 할 때positional arguments만 받을 때keyword arguments만 받을 때posi
✔️ 오늘 함수 관련 알고리즘 문제를 풀면서 괜찮은 연산 방법이 있는 것을 보고 인상적이어서 남겨 놓는다!✔️ 사실 배열 자체로 연산을 하는 것은 아니고, set 자료구조를 이용해서 연산을 할 것이다.✔️ 이렇게 사용하면, a에서 b에 있는 원소를 제외시킬 수 있다.
✔️ 스네이크 케이스: 변수를 밑줄(\_)로 구분하여 표기하는 방법ex.✔️ 코딩테스트는 일반적으로 짧은 알고리즘으로 끝나는 경우가 많고, 타입은 지정하지 않아도 한눈에 보일 만큼 명확하기 때문에 굳이 지정하지 않아도 문제는 없다. 그러나 코드를 정리할 때만이라도 타입
✔️ big-O: 입력값이 무한대로 향할때 함수의 상한을 설명하는 수학적 표기방법✔️ 시간복잡도의 사전적 정의는 어떤 알고리즘을 수행하는 데 걸리는 시간을 설명하는 계산 복잡도를 의미하며, 계산 복잡도를 표기하는 대표적인 방법이 빅오다.✔️ 시간 복잡도를 표기할 때는
정규식에 일치하는 부분 문자열을 원하는 문자열로 치환한다.파이썬 문자열은 기본적으로 replace 메서드를 갖고 있기 때문에 일반적인 문자열은 그냥 치환이 가능하다. (replace는 정규식 패턴에 대응하는 문자열을 찾아주지는 못한다.)pattern : 정규 표현식re
reverse는 return 시키는 value 없이 배열 자체를 거꾸로 만든다.
숫자인지 판단해 주는 함수숫자면 True, 아니면 False문자인지 판단해 주는 함수문자면 True, 아니면 False문자 또는 숫자인지 판단해 주는 함수문자 또는 숫자이면 True, 아니면 False
원본을 변형시켜 정렬한다. 정렬 기준은 문자열은 알파벳, 가나다순이고 숫자는 오름차순이 기본값이다.정렬된 결과를 반환하고, 원형을 변형시키지 않는다. 괄호 안에 반복 가능한 iterable 자료형을 입력하여 사용한다.ex. list, tuple, str, dict정렬
1\. 리스트 더하기2\. 리스트 반복하기1\. ai시간 복잡도 : O(1)인덱스 i의 요소를 가져온다.2\. ai:j시간 복잡도 : O(k)i부터 j까지 슬라이스의 길이 만큼인 k개의 요소를 가져온다. 이 경우 객체 k개에 대한 조회가 필요하므로 O(k)이다.3\.
1\. len(a)시간 복잡도 : O(1)요소의 개수를 리턴한다.2\. akey시간 복잡도 : O(1)\`키를 조회하여 값을 리턴한다.3\. akey = value시간 복잡도 : O(1)키/값을 삽입한다.4\. key in a시간 복잡도 : O(1)딕셔너리에 키가 존재
1\. 문자열 더하기2\. 문자열 곱하기1\. 인덱싱2\. 슬라이싱1\. 문자 개수 세기(count)2\. 위치 알려주기1(find)문자열 중 문자 b가 처음으로 나온 위치를 반환한다. 만약 찾는 문자나 문자열이 존재하지 않는다면 -1을 반환한다.3\. 위치 알려주기2
원소를 뽑아서 순서대로 나열하기 까지 해야 함.똑같은 원소가 모여도, 순서가 같지 않으면 다른 것으로 본다.원소를 뽑기만 함. 순열처럼 순서를 생각하지 않음
1) 각각의 progress를 speed와 함께 계산해서 배포에 걸리는 시간을 계산하고, deploy라는 리스트로 할당한다.2) deploy 리스트를 순회한다.3-1) deploy의 원소가 max_deploy보다 크면 max_deploy값에 원소 값을 할당하고, 원소
1) scoville를 for문으로 순회하여 heap에 push한다.2) heap은 min-heap으로 제일 작은 값이 맨 앞에 온다.3) while문으로 heap0가 주어진 K 지수보다 작을 경우에 계속 반복한다.4) 스코빌 지수가 가장 낮은 두개를 꺼내기 위해서 h
1) 입력으로 주어진 시간(no)내에 works를 전부 처리할 수 있으면, 초장에 return 02) works에서 제일 오래 걸리는 시간부터 1시간씩 차감해야되서, max-heap을 사용!3) works를 순회하여 (-work, work)형태로 다시 재정비 (max-
1) image를 순회했는지 확인하기 위한 visited 배열 생성2) for문으로 0, 0 위치부터 탐색 시작 (bfs 사용)3) queue를 deque에 start를 추가한 형태로 할당한다.4) while 문으로 큐에 대기 중인 원소가 없을 때까지 반복시키기5) 큐
1) healths를 오름차순으로 정렬한다.2) items를 (debuff, buff, index)순으로 재정비하고, 오름차순으로 정렬하여 deque로 만든다.3) healths를 기준으로 순회한다. (for문)4) while 문으로 items에 원소가 전부 사라질 때
1) 주어진 문자열을 for문으로 반만 순회한다. -- 첫번째 for문 (문자열의 반이 넘어가면 어차피 압축이 불가능)2) "aabbaccc"라는 문자열이 있으면 "a", "aa", "aab", "aabb" 라는 문자열로 생성할 수 있게 끔 문자열 변수(prev) 생성
1) x는 x좌표끼리, y는 y좌표끼리 묶어서 리스트 생성하고 순회 (for문)2) x좌표, y좌표를 Counter 객체로 만들고 차례로 순회 (for문)3) count가 1인 좌표를 answer에 추가4) for문이 끝나면 answer 리턴XOR 연산으로 문제를 쉽게
1) specs를 객체로 만든다.2) names를 순회(for)하면서, max_weight -= specsname3) max_weight가 specsname보다 작은 경우, count+=1하고 limit=max_weight4) for문이 끝나면 return count
1) 문자열 s 순회 (for문)2) stack에 원소가 있는지, stack-1와 현재 stack에 넣으려고 하는 문자가 같은지 판별3) 맞으면 stack.pop()하고, 아니면 stack.append(c)4) stack에 문자가 있는면 1 리턴, 없으면 0 리턴
1) 문자열 s 순회 (for문)2) stack에 문자가 있고, 맨 끝에 문자가 현재 넣으려는 문자보다 알파벳 순서상 앞에 있는 문자면 stack.pop()3) 2번 조건을 만족하면 계속 반복 (while)4) while문이 끝나면 문자를 stack에 추가한다.5) f
1) dirs 순회 (for문)2) 현재 점에서 움직일 방향의 값을 더해, 다음 점 생성3) 다음 점의 x, y가 -5이상이고 5이하이면 set()으로 된 stack에 추가stack이 set 자료구조이기 때문에, 지나갔던 선분은 추가되지 않는다.stack.add((현재
1) nums의 원소를 key로 defaultdict 생성2) 가로, 세로, 대각선 두개를 나타내는 빙고 딕셔너리 생성3) board를 순회 (이중 for문)첫번째 for문에서 두 대각선 bingo가 있는지 확인있으면 bingo'diagonal'과 1에 각각 1을 추가
0) 문제 유형 파악: 완전 탐색 문제1) M과 N이 겹치는 최대 사이즈 board 생성문제에서 key와 lock의 길이 M, N이 많이 사용되므로 변수로 선언2) board 중심에 lock값 배치3) (90도, 180도, 270도, 360도) 회전시킨 key 전부를
0) 문제 유형 파악: 완전 탐색 문제1) prime이라는 n 이하의 소수 리스트 생성 -> 2, 3, 5, 7 ...0부터 n까지의 index를 가진, 원소의 값이 전부 True인 리스트를 생성소수가 아닌 값들은 False로 처리2부터 n의 제곱근까지 i에 할당하여
0) 문제 유형 파악: 완전 탐색 문제1) weights의 길이만큼 i번 반복 (for문)2) weights에서 i+1개의 조합을 생성3) 각각의 조합의 합을 구함4) 합이 가방의 무게 m과 일치하는 것만 필터한다.5) 필터된 리스트의 길이(가방을 채울수 있는 경우의
가끔 코딩테스트 문제를 풀다보면, 약간의 트릭? 기술?을 쓰면 편한 부분들이 있다.오늘 작성하는 부분들이 바로 그런 것들이다. 알면 너무 편하고, 모르면 쌉고생하는 것들...바로 ㄱㄱ해보자list(zip( \*arr\[::-1] ))list(zip( \*arr ))가끔
파이썬으로 문제를 풀다보면 in이라는 오퍼레이터를 굉장히 많이 사용하게 되는데, 주의해야할 경우가 있다.뒤에 리스트가 오는지, 딕셔너리가 오는지에 따른 차이인데 당장 알아보도록 하자!리스트에 있는 원소 하나하나와 연산을 수행한다.때문에 시간복잡도가 O(N)이다.1이 a
0) 문제 유형 파악: 탐색횟수 최대 27000번 👉 완전 탐색 문제 (나는 O(N^3)으로 풀음... 더 좋은 방법 탐구해봄)1) 1부터 S1, S2, S3까지의 리스트 생성2) s1, s2, s3에서 1개씩 선택하여 조합생성3) 조합들의 합에서 1 더한 값이 몬스
0) 문제 유형 파악: 탐색횟수 최대 2005000번 👉 완전 탐색 문제 (O(N)이나 최대 O(N\*logN)의 시간복잡도를 가지는 탐색법으로 풀어야함)1) 주어진 red로 2차원 리스트를 만드려면, red의 약수여야한다.약수 list생성2) 약수중에 2개를 뽑아서
0) 문제 유형 파악: 하노이의 탑 처럼 비슷한 동작을 반복하는 것들은 재귀함수로 푼다!출발지의 가장 밑에 있는 판이 도착지의 가장 밑으로 이동하려면, 출발지에서 가장 밑의 판을 제외한 나머지 판들이 전부 보조에 있어야한다.재귀 함수 문제는 잘게 쪼개서 제일 작은 사이
특정 일의 요일을 숫자로 반환한다.0~6 : 월~일isoweekday() 👉 1~7 : 월~일