전체 글 썸네일형 리스트형 [프로그래머스(Programmers)/Level2](Python) 압축 입력받은 문자열을 제일 앞에서부터 한자리씩 늘려가면서 dictionary에 해당 문자열이 있는지 검사한다. 해당 문자열이 없을때, 이전의 문자열에 해당하는 색인을 answer에 추가하고 해당 문자열의 색인을 추가해준다. 이 두가지 작업 후에 원본 문자열을 담고있는 리스트에서 answer에 추가한 색인에 해당하는 문자열을 제거해주는 작업을 주어진 문자열이 끝날때 까지 반복하면 결국 모든 색인이 answer 리스트에 담기게 된다. 코드를 보면 알겠지만 불필요한 변수를 이용하여 조금 복잡하다. 변수를 많이사용할 수록 문제해결에 방해가 된다는 사실을 깨달았다.(근래에 메모리는 예전과 달리 훨씬 크므로 이전에 굳이 있는 변수를 억지로 활용하지말고 새로운 변수를 선언하여 사용하는 것도 좋은 방법이란 글을 본 적이 .. 더보기 [프로그래머스(Programmers)/Level2](Python) 후보키 combination을 사용하여 속성들의 조합을 구하고, 해당 속성에 해당하는 값들을 string으로 이어붙여준 후,(각 행마다 실행한다) 그 이어붙인 값들을 담은 리스트를 셋으로 변환했을때도 길이가 같으면, 해당 속성의 조합은 유일성을 만족하므로 리스트에 담아준다. 이렇게 유일성을 만족하는 속성의 조합들 중, 최소성을 만족하는지 확인하기 위해, set연산들을 사용해서 찾아준다. combination으로 바꾸는데 속성이 하나 짜리들은 (0,)이런식으로 콤마가 들어가서 다른 방법을 이용해서 풀까 생각하다가 리스트로 바꿔봤더니 콤마가 사라졌다. 리스트가 반복문 중간에 값이 삭제되거나 추가되어도 문제가 되지 않게 아기위해 [:]를 이용하는 법을 배웠다. 문제자체가 조금 까다로웠으며 많은것을 배울 수 있었다. 더보기 [프로그래머스(Programmers)/Level2](python) 방금그곡 먼저 #이 붙은경우는 좀 더 다루기 쉽게 하기 위하여 해당알파벳 소문자로 치환한다(모든 음이 대문자 이므로). 그러고 곡에대한 시작,종료시간, 곡명,음 을 리스트에 담아 곡의 재생시간을 구하고 주어진 시간만큼 주어진 음을 반복해서 임시로 문자열에 담아놓고 임시 문자열에 들었던 음들이 포함되어 있으면 재생된시간, 들어온 순서와 같이 answer리스트에 넣어주고 1차로 재생된 시간을 기준으로 정렬, 2차로 재생된 시간이 같으면 들어온 순서 기준으로 정렬을 해준 뒤, 리턴한다. 문제가 간단한거 같으면서도 은근히 복잡한 작업을 많이 요했고(알파벳 치환, 문자열 시간들을 걸린 시간으로 바꾸기, ...등) 정렬을 1차,2차 기준을 나눠서 해야했다. 집중력을 잃지않고 끝까지 푸는 것이 중요하다고 느꼈다. 더보기 [프로그래머스(Programmers)/Level2](Python) 오픈채팅방 최종으로 바뀐 이름을 아이디에 매치시켜주고 enter과 leave를 만나면 해당 아이디에 해당하는 이름을 출력한다. dict의 key 1개에 value값은 최종으로 넣은 값이 매치된다 라는 부분을 확인하고 연습할 수 있었다. 더보기 [프로그래머스(Programmers)/Level2](Python) 캐시 입력받은 문자열들을 소문자로 바꿔 리스트에 저장하고,입력받은 리스트를 순회하면서 해당 원소가 만약 cachesize가 cache의 원소 갯수보다 크고 해당 원소가 cache에 없으면 miss이므로 answer에 miss를 더해주고 단순히 cache에 원소를 추가해준다. 캐시 크기가 cachesize와 같고 원소가 cache안에 없으면 제일 앞의 원소를 제거하고 해당원소를 삽입한다.(캐시 안에 해당 원소가 있을때는,해당 원소를 캐시 맨 뒤로 빼줌으로서 리스트 맨 앞의 원소는 참조된지 가장 오랜 원소이기 때문에 이와 같은 연산을 해준다.) 기본적인 알고리즘은 공부해둬야 할것 같다는 생각을 하였다. 더보기 [프로그래머스(Programmers)/Level2](Python) 뉴스 클러스터링 알파벳 외의 문자를 만나면 해당 문자열을 버리는 식으로 해서 for문으로 2개의 리스트를 만들고, 길이가 긴 리스트를 str1_lst에 위치시킨다. str2_lst의 전체 원소를 살펴보면서 str1_lst에 해당 원소가 있으면 삭제하고 이 삭제된 원소가 교집합, 삭제된 원소를 제외한 모든 원소들의 합이 합집합 이므로 주어진 공식에맞게 나눠주고 65536 을 곱하여 리턴한다. 라이브러리를 사용하며 문제를 푸는것도 중요하지만 이런 특수한 경우를 대비해 직접 구현해 보는 연습도 필요하다는 것을 느꼈다. 더보기 [프로그래머스(Programmers)/Level2](Python)예상 대진표 시작번호를 A,B로 부여받은 두 사람이 만나려면 둘의 숫자차이가 1이 나고, 동시에 더 작은수가 홀수여야 하므로 if문으로 종료조건을 걸어줬고 한 라운드가 끝나면 해당 번호에서 2를나눠 올림 하면 되므로 ceil을 사용하였다. 조건에 총 참여 인원인 n이 쓰이지 않고도 문제가 풀렸다. 이런문제도 있구나 생각해보는 계기가 되었다. 더보기 [프로그래머스(Programmers)/Level2](Python) 영어 끝말잇기 끝말잇기가 종료되기 위해선 크게 두가지 조건이 필요하다. 앞에서 말했던 단어인지 찾기위해 set을 두개 추가해 해당 단어를 한 셋에 추가해 두개의 length가 같으면 중복되는 단어이므로 탈락, 이전에 추가했던 단어의 끝글자를 tmp에 저장해놓고 새로 말할 단어의 첫째 단어와 같지 않으면 탈락 이 두 조건을 주어진 단어들을 다 말할때 까지 반복하며 조건에 맞지않으면 리턴한다. 중복 검출엔 set!! 한번더 느꼈다. 하지만 set에는 순서가 없기때문에 이점을 유의하며 문제를 풀어야 할 것 같다. 더보기 이전 1 2 3 4 5 6 7 8 ··· 10 다음