난이도: Lv.3유형: 연결 리스트해결 여부: 정확성 맞음, 효율성 틀림 내가 생각했던 아이디어/큰 가닥이 김에 문자열이랑, 프로그래머스로 코테볼때 에러라인이 안떠서 어디서 틀렸는지 난감할때가 있었다. 그래서 그 에러라인 쓰는 법 까지도 알아왔다. 문제 자체는 어렵지 않다고 생각했다. 근데 이제 시간에서 걸려서 보니까 처음부터 이건 연결리스트를 써야하는 문제였다. 오답 이유연결리스트 미사용으로 인한 배열 순회로 시간 초과wheremove함수로 통합하고 그래도 여전히 O(n)으로 시간 초과났다.복구 데이터를 참조해야하나 싶었는데 그것도 결국 O(n) 이어서 안했다. 해답결국 이렇게 뭔가 다음값 이전값이 있고, 이걸 순회하면서 점프해야 할때는 연결리스트를 써야 한다. 꼭 객체지향 할 필요도 없이 걍 딕셔너리..
Algorithm/Data_structures
난이도: Lv.3유형: 힙해결 여부: 정답내가 생각했던 아이디어/큰 가닥전형적인 힙을 이용한 문제로 실시간으로 가장 크거나 작은거 하나 찾는 식으로 접근했다.오답 이유한번 일괄적으로 jobs 다 정리하고 힙이 처리만 하면 된다고 봤는데 사실 모든 job이 항상 실행중일떄 다 들어와 있는건 아니라서 실시간으로 처리해야 했다.해답그래서 jobs 배열에 포인터처럼 접근하고 현재시간 변수를 만들어, 현재시간 보다 입장시간이 작은 값만 넣도록 했다. 그러고 heap은 비어있는데 jobs가 시간상 들어갈 수 없는게 판단되면 currenttime을 늘려주었다.#기억할 문법 #내 정답코드import heapq#jobs: [요청시점, 작업의 소요시간]#schedule:[소요시간, 요청시점, 번호]def solution(..
난이도: Lv.3유형: 힙해결 여부: 정답내가 생각했던 아이디어/큰 가닥힙이나 덱 써서 한다고 생각했다. 실제로 모범답안도 힙이었다.근데 파이썬에서 heapq 은 최소밖에 지원 안한다는걸 알고 걍 리스트로 통과되나 했는데 그냥 통과 되어버렸다.오답 이유틀린건 아니다. 다만 매번 정렬하는게 효율이 떨어져 나중에 타임오버에러가 날 수 있다.해답2단계인데, 우선 조금 개선된 방식은 최소힙 쓴다음에 최대 삭제하라고 하면 remove를 쓰고 heapify를 쓰는거다. heap에서도 remove를 지원한다. 대신 그러면 heapify()로 재정렬이 필요하다. 제일 좋은 방식은 최대힙, 최소힙 2개 다 쓴다. 그리고 넣을때는 최대힙에는 -붙여서 뒤집어서 넣는다. 그리고 넣을떄 (value,ID)를 쌍으로 넣는다. 그..
난이도: Lv.2유형: 스택/큐해결 여부: 해결아이디어처음에는 결국 같은 값들 중에서 몇번째로 정렬되는가?를 봐야하므로 크거나 작은거 다 재끼고 시작해야하나했다. 근데 그러면 index가 달라지며 그 직전 요소들도 직접 해보지 않으면 뭐가 먼저인지 알수 없다고 판단해 걍 일일히 하기로 했다. input으로 1~9 만 들어온다는걸 이용해서, 아예 pop 해버리면 index 지정한게 달라지니까 pop은 안하고 0으로 값을 바꿈.모범 답안은 any를 활용해서 리스트 하나라도 만족하는 값 있으면 하거나, 실제로 append pop 하면서 했다. 실행시간이 크게 차이나지는 않는다.오답 이유 혹은 알게 된것리스트 컴프리헨션 문법 주의!문법실수 i랑 val 바뀜, 리스트명 잘못씀, return 위치 인덴팅, 0이 아..
난이도: Lv.1유형: 스택해결 여부: 오답아이디어숫자를 문자열로 접근하며, 각 자리의 숫자를 세는 계수적 정렬 사용아이디어 자체는 정답오답 이유 및 알게 된것시간초과문자열의 반복 추가에 반복문 사용 -> * 문법으로 바꾸었지만 여전히 시간초과문자열에서 특정 문자의 개수 셀 때 for문으로 1회 순회하여 사용 -> count() 함수 사용이 결정적, count() 가 for문 1회독보다 훨씬 빠름엄청긴 문자열, 숫자열의 형변환은 그만큼 오래걸림. 그래서 모두 0인것을 검출해야 할때 len()=count() 문법 사용 필요했음.즉, 파이썬은 내장함수가 많은대신 이를 잘 이용해야만 한다. 시간차이가 엄청 크다.def solution(X, Y): answer = '' for i in range(9,..