전체 글 77

[프로그래머스/DP/python] 도둑질

처음에는 recursion을 이용하려 했지만 시간 초과가 날 것 같아서 다른 방식을 찾아봐야했다. 결국 스터디에서 친구의 코드를 참고해서 문제를 풀게 되었다. DP 문제는 보통 dp[n] = dp[n -1] + dp[n - 2] dp[n] = max(dp[n - 1], dp[n - 2]) ... 이런 느낌의 점화식으로 풀 수 있는 문제인데 이번 문제도 그랬다. 로직 [10, 20, 30, 40, 50, 60] 이 있으면 인덱스가 2인 위치에서 최대가 될 수 있는 경우는 max(30 + 10, 20) -> max 값을 3의 위치에 업데이트 [10, 20, 40, 40, 50, 60] 인덱스가 3인 위치에서 최대가 될 수 있는 경우는 max(40 + 20, 40) -> max 값을 4의 위치에 업데이트 [1..

코테 준비 2021.02.16

[프로그래머스 / 그리디(Greedy) /python] 조이스틱

로직 문제를 해결하기 위해서는 크게 두 가지를 구해야 한다. 기본 설정이 모두 A라고 했을 때 조이스틱을 1. 아래 혹은 위로 최소 몇 번을 움직여야 하는지 2. 옆으로 최소 몇 번을 움직여야 하는지 아래 혹은 위로 해당 문자의 아스키 값을 이용해서 구했다. 옆으로 옆으로 가는 경우는 세분화 해보면 아래와 같다. 1. 한 쪽으로만 가는 경우 (1) 왼쪽으로만 (2) 오른쪽으로만 가장 왼쪽 혹은 가장 오른쪽에 연속된 A가 몇 개인지 확인한 다음 방향을 결정한다. (연속된 A의 길이를 확인하는 이유는 A가 있는 구간은 굳이 조이스틱이 거쳐가도 되지 않기 때문에 최대한 A의 길이가 긴 곳의 반대방향을 선택한다.) right_most_A = count_continuousA(reversed(name)) left_..

코테 준비 2021.01.31

[프로그래머스/2019 카카오 개발자 겨울 인턴십/python] 불량사용자

로직 불량 사용자 후보군 추출 먼저 불량 사용자 리스트를 통해서 제재 대상이 될 후보군들을 추출한다( 추출 시에 정규 표현식을 사용했다) 만약에 아래와 같은 예시가 있다면 user_id = ["frodo", "fradi", "crodo", "abc123", "frodoc"] banned_id = ["*rodo", "*rodo", "******"] 각 불량 사용자에 대한 후보군들은 아래와 같다. *rodo ['frodo', 'crodo'] *rodo ['frodo', 'crodo'] ****** ['abc123', 'frodoc'] DFS 탐색 이후 dfs로 제재 아이디 목록을 찾아낸다. 만약 leaf까지 탐색했다면 완성된 제재 리스트가 현재 이미 만들어진 제재 리스트에 없다면( stack not in c..

코테 준비 2021.01.25

[프로그래머스 / 그리디(Greedy) /python] 큰 수 만들기

첫 번째 코드 - 실패 처음 코드의 로직은 len(numbers) - k 번 만큼 (즉, 최종적으로 나오게되는 숫자의 길이만큼) 최댓값 찾는 탐색을 수행한다. 최댓값 탐색의 범위는 이전 최댓값이 나왔던 index + 1부터 현재 탐색할 수 있는 최대 영역까지이다. 예를 들어 만들어야 하는 숫자의 총 길이가 3이고 현재 "1234"라는 숫자 안에서 첫 번째 숫자를 선택 해야할 때, 첫 번째 숫자를 위해 탐색해야하는 영역은 "12"이다. 만들어야하는 숫자의 총 길이가 3이기 때문에 첫 번째 숫자가 선택된 이후 두 번째, 세 번째 숫자를 선택해야하는 상황까지 고려해야하기 때문이다. def solution(number, k): answer = [] start, end = 0, k + 1 while end num..

코테 준비 2021.01.24

함수형 프로그래밍

아래의 조건들을 충족하는 프로그래밍 패러다임이 함수형 프로그래밍이다. 1. 일급객체(First Class Object) 함수도 객체처럼 변수나 함수의 인자처럼 리터럴하게 다룰 수 있다. 즉, 함수를 메소드 매개변수, 리턴 타입, 변수로 사용할 수 있다. 함수 리터럴 : 함수 자체가 변수처럼 사용될 수 있다. 2. 순수 함수(pure function) 다른 상태에 의존하지 않는 함수 따라서, 외부 상태 값에 의존하는 함수는 순수 함수가 될 수 없다. 외부 상태에 의존하지 않기 때문에, 언제나 같은 값을 넣으면 항상 같은 값이 나오는 것을 보장한다(참조 투명성). 이러한 특성은 함수를 예측 가능하게 만들어준다. (자바에서) 외부에 있는 값을 변경하는 것은 안되지만 참조해서 사용하는 것은 가능하다. 단 그 사..

카테고리 없음 2021.01.20

[leetcode/python] Two Sum / Reverse Integer / Remove Duplicates from Sorted List

Two Sum 문제 링크 문제는 쉬웠지만 여러가지 방식으로 접근할 수 있어서 흥미로운 문제였다. 내가 접근한 방법은 Brute-force였다. 간단하게 그냥 모든 경우의 수를 다 따져보는 방식이었다. # Python class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: indice = [i for i in range(len(nums))] for pair in combinations(indice, 2): if nums[pair[0]] + nums[pair[1]] == target: return pair return [0, 0] 그런데 Solution을 보니 a + b = target -> a = target - b라는 점을..

코테 준비 2021.01.13

[프로그래머스/카카오 블라인드 테스트 2018/python] 추석트래픽

로직 로그들을 endtime이 큰 순서대로 탐색하면서 현재 탐색하고 있는 로그보다 endtime이 큰 로그들을 가지고 [현재 로그의 endtime] ~ [현재 로그보다 endtime이 큰 로그의 starttime] 사이의 거리를 체크해서 1초 구간 안에 있는지 확인해준다. 현재 로그보다 endtime이 큰 로그들을 모두 체크해주어도 좋지만, 그리고 1초 구간 안에 있는지 확인해주는 작업을 보다 효율적으로 처리하기 위해서 최대힙을 사용하였다. 현재 탐색하고 있는 로그보다 endtime이 큰 로그들의 starttime을 최대힙에 넣어 가장 starttime을 가진 로그부터 확인해준다. 글로 설명하는건 항상 어렵다😂 예를 들어 아래와 같은 상황이 있다고 가정해보자 이렇게 되면 최대 힙에서는 start_time..

코테 준비 2021.01.12

[프로그래머스/python] 가장 큰 수

뭔가 정직하지 못한 방법을 사용 한 것 같은 죄책감... 이 살짝 들었지만 일단 성공적..ㅎ 로직 비교연산자를 다시 정렬해주고 소팅해서 해결했다. 비교연산자를 재정의 해줄 때, 두 인자를 두 가지 방식으로 (A + B 혹은 B + A) 합쳤을 때 더 큰 수가 되는 경우를 기준으로 했다. 코드 from functools import cmp_to_key def solution(numbers): answer = '' numbers = [str(num) for num in numbers] numbers.sort(key = cmp_to_key(compare)) for num in numbers: answer += num return str(int(answer)) def compare(item1, item2): n..

코테 준비 2021.01.10

[프로그래머스/카카오 블라인드 테스트 2020/python] 자물쇠와 열쇠

로직 완전탐색으로 열쇠와 자물쇠가 한 칸이라도 겹치는 경우의 수가 있다면 모두 체크해주는 것이다. 예를 들어 lock과 key 모두 3 X 3인경우, key가 lock 주위 혹은 위를 모두 탐색하면서 키와 겹치는 부분들을 체크한다. 이때 고려해주어야할 파트는 크게 두 가지가 있다. lock - key (key와 겹치지 않는 lock 영역) 현재 key와 겹치지 않는 lock의 영역 중 하나라도 0이 있다면 자물쇠는 열릴 수 없으므로 False 이다. 그렇기 때문에 zero_count라는 변수를 두어 lock에 남아있는 0들을 세어준다. 👉 골드가 말해주지 못했다면 한참 고민했을거다. 문제를 잘 읽자 제발!! key ⋂ lock (key와 lock이 겹치는 영역) 만약 key와 lock이 겹치는 부분 값의..

코테 준비 2021.01.08

리눅스 - 우분투 VM ssh 서버, 로컬 PC에서 접속하기

👩‍💻 Ubuntu SSH 서버 구축 및 접속하기 프레디가 공유해준 링크가 도움이 많이 되었다. 👩‍💻 PC에서 VirtualBox 내의 가상환경 리눅스 서버로 ssh 접속하기 가상 환경에서 만들어진 IP 주소가 직접적으로 로컬 pc와 연결되지 않아 VM 설정에서 포트 포워딩을 따로 해주어야 했다. 쉘에서 SSH 설치 sudo apt-get install ssh SSH 설정 파일 변경 아래 명령어를 통해 SSH 설정 파일에 들어간다. 이때 vim 에디터를 사용할 줄 알아야하는데 너무 생소해서 힘들었다. 구글링을 통해 vim 에디터 조작법을 참고해가며 수정했다. $sudo vi /etc/ssh/sshd_config SSH 설정 파일 내에서 아래와 같이 수정 후 저장한다. // 변경 전 #PermitRoot..

카테고리 없음 2021.01.07