🔗 프로그래머스 - 게임 맵 최단거리P.S | 해당 문제는 데크를 BFS로 이용해서 풀면 문제 답과 효율성 테스트를 통과할 수 있다!이 방법으로도 시도해 보면서 알게 된점은!효율성 테스트를 통과하려면 최대한 적은 경우의 수로 움직여 줘야 한다. 해당하지 않은 경로는 아예 가지 않도록 계속 조건을 줘야 함!그리고1) 간곳을 maps 에서 0으로 처리해 주면서 count를 따로 세는 방법과,2) maps에 count를 저장하면서 실행하는 두가지 방법을 해봤는데둘다 테스트 코드는 통과했지만 효율성은 2)만 통과했다....! 이번주에 아는 선생님과 객체에 관해서 이야기를 나눴다. 객체를 state를 저장하는 데 사용한다는 이야기를 했었는데 그것을 실제로 적용해 보고 싶었다. 그래서 이번 코드를 객체를 이용해서..
🔗 프로그래머스 - 타켓 넘버재귀로 풀었다!!각 숫자 사이에 + 또는 - 연산자를 넣어줘야 하는데재귀로 돌면서 디시전 트리 도는 것 처럼 + , - 를 선택하고 마지막 숫자까지 갔을때 target과 같으면 count += 1를 해줘서 답을 얻었다.def solution(numbers, target): def choose(idx, num_sum): if idx == len(numbers): if num_sum == target: return 1 return 0 return choose(idx + 1, num_sum + numbers[idx]) + choose(idx + 1, num_sum - numbers[i..
🔗 프로그래머스 - 소수찾기멍청 이슈로 너무 오래 풀었다...문제 풀이 과정은 다음과 같다.종이 조각들을 조합할 수 있는 모든 경우의 수를 구한다. 숫자로 변환 후 set 안에 넣어 중복되는 경우의 수를 삭제한다.소수 인지 확인한다.여기에서 라이브러리를 사용하지 않았다가 삽질 했다. 앞으로도 자주 사용하게 될거 같아 기록해 놔야겠다. Python itertools순열과 조합 함수를 포함해 여러 iteration 를 만들어 준다. count() : count(10) → 10 11 12 13 14 ...accumulate() : accumulate([1,2,3,4,5]) → 1 3 6 10 15chain() : chain('ABC', 'DEF') → A B C D E Fproduct('ABCD', repe..
🔗 프로그래머스 - 카펫이 문제는 연립 일차 방정식을 푸는 문제다. 노란색 부분의 가로를 x, 세로를 y라고 하면x >= y 이여야 하고 x * y = yellow , 2 * (x + 2) + 2 * y = brown 이다여기에서 파이썬 symPy라는 라이브러리를 발견해 적어보려고 한다.코테에서는 사용이 아마 불가하겠지만 유용한거 같아 기록해본다!!symPY 는 수학 라이브러리로 다항식과 같이 수학연산을 하기 위한 라이브러리다.이 라이브러리를 사용하여 문제를 풀면 import sympydef solution(brown, yellow): answer = [] # 노란색 부분의 가로를 x, 세로를 y라고 하면 # x >= y 이여야 하고 x * y = yellow , 2 * (x + 2..
🔗 프로그래머스: H-indexh-index 조건을 제대로 이해하는 것이 중요하겠다. n개의 논문이 있을 때1. h번 이상 인용된 논문의 수가 h 이상일 것2. 그 나머지 논문의 수가 h 번 이하로 인용 되었을 것 "나머지 논문"을 잘 읽지 않고, h번 이하로 인용된 논문이 h개 이하일 것으로 생각해서 삽질 했다. ☹️코드 자체는 위의 조건을 그대로 잘 적으면 되는 데 filter 를 사용해서 풀었다. def solution(citations): citations.sort() h = citations[len(citations) // 2] length = len(citations) bigger_equal = len(list(filter(lambda x: x >= h, citation..
🔗 프로그래머스 - 가장 큰 수시간이 오래 걸렸다 ㅠㅠㅠㅠ 처음 시작할 때는 호기롭게 시작했는데 테스트에서 와장창 틀려버렸다.1~6 테스트 케이스를 계속 통과 못하다가 했다. 제일 문제였던 2가지 점에 대해서 기록해 보겠다.우선 정렬이 필요한데 조건이 조금 까다롭다. 1. '23' 와 '2313' 일 때 - 즉 왼쪽부터 같은 숫자가 나오다가 다른 경우 '23'을 '2313'과 같은 자릿 수가 되도록 이어 붙였다. 결국 자릿수가 중요하기 때문이다.'2323' 과 '2313'을 비교해보면 '2323'이 더 크므로 '23'+'2313' = '232313' 이 제일 크다ex) '85' 와 '8593'을 비교할 때 '8585' 는 '8593'보다 작으므로 '8593' + '85' = '859385' 가 답이다...
🔗 2336. Smallest Number in Infinite Set이 문제 또한 heap 을 사용하면 훨씬 실행속도가 빨랐다. 1~1000 의 숫자가 있는 set 에서 popSmallest 를 하면 가장 작은 숫자를 반환하고addBack 을 하면 숫자를 추가한다. 당연히 집합이므로 같은 숫자는 들어갈 수 없어야 한다.min( ) 으로 최소값을 찾았을 때 실행속도가 상당히 느렸다.heapq를 사용하면 속도가 빨라졌으나 나보다 빠른 사람들이 훨씬 많았다heapq를 사용하면서 Counter를 사용한 예시를 봐서 따라해 봤는데 더 빨라졌다. Counter 란? 🙄 - 출처: 파이썬 공식문서 Counter 란 hashable 한 object를 count 하는 dict의 su..
🔗 프로그래머스 - 디스크 컨트롤러운영체제 수업때 했던 내용이었으나 또 삽질을 했다.정리하자면,하드디스크가 놀고 있을 때에는 먼저 요청된 작업부터 진행한다. - jobs 를 sort 해야 한다는 뜻하드디스크가 작업중일 때 요청이 들어오는 경우 작업 시간이 짧은 작업 순서로 대기열에 들어간다. - heap을 이용해 우선순위 정렬 삽질 했던 부분은대기열에 삽입 할 때, 요청된 시간 보다 현재 시간이 클 때로 잘못 적어놔서 (요청 시간 > time) 계속 틀렸었다 ▶ 부등호 잘 보기작업 시간이 0일 때 처리를 해주지 않아 틀렸었다. 처음 jobs를 sort 하지 않아 틀렸었다. + 다른 분이 푸신 방법 중에 데크를 사용한 방법이 있었다. 실행속도가 굉장히 빨랐다. 데크는 처음 들어봐서 정리해 봤다.dequ..