일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- DP
- 리눅스
- docker
- codewars
- 스칼라
- golang
- 동적프로그래밍
- OOM
- 튜토리얼
- redis
- scala
- Linux
- Python
- boj
- dynamic programming
- 알고리즘
- 문제풀이
- Java
- 주키퍼
- gradle
- 코드워
- programmers
- HBase
- Go언어
- go
- 자바
- zookeeper
- 프로그래머스
- leetcode
- 파이썬
- Today
- Total
목록문제 풀이 (29)
파이문
540. Single Element in a Sorted Array(https://leetcode.com/problems/single-element-in-a-sorted-array/#/description) 어떤 List에 int 값이 들어있는데 하나의 숫자만 한개가 있고, 나머지는 모두 두개씩 있을 때, 그 하나만 존재하는 숫자를 리턴하는 것입니다. for문 두번 돌리면 간단히 해결하지만 조건이 붙었습니다. 공간 복잡도 O(1)에, 시간 복잡도가 (logN)입니다. logN이기 때문에 분할해야 하는데, 저는 재귀로 나누어가면서 풀었습니다.List의 정 가운데를 자른다고 생각하면 현재 숫자를 기준으로 왼쪽이 홀수개의 리스트면 왼쪽에 찾고자 하는 숫자가 있을 것이고 오른쪽이 홀수개의 리스트면 오른쪽에 있을..
101. Symmetric Tree(https://leetcode.com/problems/symmetric-tree/#/description) 대칭이 되는 트리인지 아닌지를 판별하는 문제입니다.아래와 같이 가운데(?) 를 기준으로 접혀진다면(대칭이 된다면) True를 리턴하고 1 / \ 2 2 / \ / \ 3 4 4 3한쪽이 비거나, 다른 숫자가 들어가거나 등등 대칭이 되지 않는다면 False를 리턴합니다. 1 / \ 2 2 \ \ 3 3 Easy 문제이기 때문에 어렵게 생각할 필요가 없습니다.문제 그대로 맨 왼쪽은 맨 오른쪽과 같아야 하고, 가장 왼쪽의 오른쪽은 (형제 노드는) 가장 오른쪽의 왼쪽 노드 (형제 노드)와 같으면 됩니다. 재귀로 계속 체크해나가면서, None이면 가장 끝의 노드이니 그 때..
Number of Boomerangs(https://leetcode.com/problems/number-of-boomerangs/) 좌표의 범위가 각각 -1000부터 1000까지 되는 point가 최대 500개가 있을 때, 서로 다른 point 끼리의 거리 중 같은 것의 개수를 구하는 문제였습니다. 예를 들어 (0,0), (0,1), (0,2) 라는 point가 존재할 때 (1,0)과 (0,0)의 거리는 1이고 (1,0)과 (2.0)의 거리고 1입니다. 이 때, i를 (1.0)으로 두고 j를 (0,0) 또는 (2,0), k를 (2,0) 또는 (0,0)이라고 할 때 i와 j의 거리 그리고 i와 k의 거리가 같습니다. 이렇게 같은 거리를 갖게 되는 경우가 세 점 사이에서 총 2가지가 발생하는데요. 이 2를 ..
Maximum Random Walks 백준온라인 저지 3946번 문제입니다. 스터디에서 풀기로 했던 문제였는데 저한테는 너무 어려운 문제였습니다. 문제 자체도 해석이 잘 안되었었는데요. 오히려 번역이 애매했습니다. 영문으로 된 설명을 스터디원 한테 들은 이후에야 문제가 이해가 갔습니다.(문제가 이해가 가는 것과 푸는 것은 또 별개였습니다. 2시간 반 넘게 고민했지만 못 풀어서 그냥 답안을 보기로 하였어요. 이제 2시간 반이 넘게 걸리는 문제는 왠만해선 끝까지 안 물고 늘어지려구요, 답 보고 공부하는 게 저한텐 훨씬 나은 것 같습니다.) 문제는 다음과 같습니다.동전 하나를 던질 때 뒷면이 나오면 왼쪽으로, 앞면이 나오면 오른쪽으로 걷습니다.다만 동전이 옆면이 나오는 경우도 있는데 이 경우엔 움지기이지 않기..
Triangle number check 항상 파이썬으로 풀지만 오늘은 자바를 공부할 겸 자바로 풀어보았습니다. 입력 받은 n이 삼각형이 되는 수인지 판별 하면 되는 문제였는데요, 여기서 삼각형이란 삼각형 모양을 의미합니다. 삼각수? 정도로 생각하면 될 것 같아요. 운이 좋게도 바로 얼마전 우연히! 프로젝트 오일러 41번이였나, 42번 문제를 보았는데 삼각수가 나왔었거든요. 그래서 쉽게 삼각수 문제라는 것을 유추해내고 공식만 대입하였습니다. 이는 n번 째의 삼각수는 N 이라는 의미입니다.즉 첫 번째 삼각수는 1, 두 번째 삼각수는 1-2-3이니 2 * (2+1)/2 해서 3 (마지막 수죠), 세 번째 삼각수는 6(3 * 4 / 2)이 되는 거죠. 다시 말하면 순서는 n이고 삼각수는 N이 되는 것이죠. 그래..
Consecutive strings 이 전까지의 문제가 그냥 믹스 커피였다면 이 문제는 카누 정도 되더군요. 일단 함수의 첫 번쨰 입력으로 연속된 문자열이 담겨 있는 리스트가 오게 됩니다. (다른 언어에선 배열) 그리고 두 번째 입력으로 int형(K) 숫자가 오게 되는데요. 이 두 값을 받아서 연속된 K개의 문자열이 가장 길어지는 경우를 return 해야 합니다. 말로는 어려운데 예를 들면 다음과 같습니다. ["a", "bc" , "def"] , 2 가 들어오게 되면 "bc" , "def" 두 개의 값의 총 길이는 5입니다. 이는 ["a", "bc" , "def"] 에서 2개를 골라 만들 수 있는 가장 긴 문자열 입니다. 단, 앞서 말했듯이 연속되어야 합니다. 그래서 예제로 테스트 해볼 수 있는 다음과 ..
Valid Phone Number 입력 받은 문자열이 핸드폰 번호라고 판단할 수 있는지에 관한 문제였습니다. "지역번호 앞 번호-뒷 번호" 순이면 옳다고 판단할 수 있습니다. (단, 문제에도 적혀 있듯이 지역번호 다음에 오는 닫힌 괄호 뒤에 띄어쓰기가 꼭 있어야 합니다.) 어렵지 않게 그냥 쉽게 생각해서 풀기로 하였습니다. 띄어쓰기를 구분으로 지역번호와 전화번호로 나누어지고 이 때 길이가 2여야 하며 전화번호는 다시 하이픈을 기준으로 길이가 2가 된다면 옳은 전화번호로, 판단하기로 하였습니다. 하지만 에러가 나더군요. 생각해보니 하이픈이 숫자 맨 앞에 오는 경우도 단순히 길이를 2로 판단해서 True를 리턴한다는 것을 알았습니다. 띄어쓰기도 마찬가지였습니다. (예제 입력 값에 알파벳은 들어가지 않는다고 ..
Replace With Alphabet Position 알파벳으로 이루어진 문자열을 받고, 거기에 해당하는 순서 (a라면 첫번째 알파벳이므로 1)를 리턴하는 문제였습니다. 단, 알파벳이 아닌 (쉼표와 같은) 문자는 무시해야 하였습니다. 우선 전체 문자열을 모두 대문자로 바꾸고 아스키 값으로 다시 변환한 후 특정 숫자 (64)를 빼어 순서를 구하려 하였습니다. 그런데 테스트코드에서 에러가 나, 무슨 일인가 봤더니 결과 값이 리스트가 아니라 문자열로 되어 있어 리스트를 문자열로 바꿔주는 작업을 한 번 더 진행하였습니다. def alphabet_position(text): text = [ord(x) - 64 for x in text.upper() if x > 65] word_list = filter(lambd..
Find The Parity Outlier 주어진 리스트에서 홀수만 있다면 짝수를, 짝수만 있다면 홀수를 리턴하는 문제였습니다. 최근에 리스트 컴프리핸션에 대해서 배웠기에 이를 최대한 활용하려 하였습니다. 저의 목표는 최대한 pythonic하게, 가독성 따위는 전혀 없이 짧게 작성하는 것이었습니다. 그런데 생각만큼 잘 안되더라구요. 역시 고기도 먹어본 놈이 먹는다고, 더 많이 써보고 더 공부해봐야 할 것 같아요. 결국 일단 답만 돌아가게 작성하고 다른 사람 코드를 보는 방향으로...ㅠㅠdef find_outlier(integers): even_list = map(lambda x: x % 2, [x for x in integers]) even = even_list.count(0) odd = even_lis..