알고리즘 풀이/프로그래머스 109

[Level 2] 오픈채팅방

https://programmers.co.kr/learn/courses/30/lessons/42888 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 접근 어떤 한 사용자는 들어왔다 나갈 수 있고 다시 들어오면서 기존의 닉네임과 다르게 입장할 수도 있다. 또한 입장 후에 닉네임을 변경할 수도 있으며 사용자들은 중복된 닉네임을 사용할 수 있다. 따라서 주어지는 조건 중에 userId를 활용하였고 user라는 딕셔너리를 만들어 userId에 해당하는 닉네임을 저장해두었다가 활용하였다. 구현 - users라는 딕셔..

[Level 2] 프렌즈 4블록

https://programmers.co.kr/learn/courses/30/lessons/17679 코딩테스트 연습 - [1차] 프렌즈4블록 프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙 programmers.co.kr 접근 문제에서 주어진 조건대로 구현하면 되는 문제이다. 따라서 아래와 같은 로직으로 구현하였다. - 2x2크기로 같은 것이 붙어있는지 확인한다. - 위의 조건에 부합하는게 있다면 해당 인덱스에 1로 표시한다. - 1로 표시한 것의 개수를 구하고 1로 표시된 것은 비어있다는 의미로 0으로 표시한다. - 위의 블록이 아래로 이동하도록 한다. ..

[Level 2] 뉴스 클러스터링

https://programmers.co.kr/learn/courses/30/lessons/17677 코딩테스트 연습 - [1차] 뉴스 클러스터링 뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브 programmers.co.kr 접근 다중 교집합과 합집합을 어떻게 구현할지를 결정하면 다른 조건은 쉽게 처리할 수 있었다. 먼저 나의 풀이에서는 문자열을 두 글자씩 끊어서 새로운 리스트를 생성한 후에 리스트 A에 있는 문자가 B에 있으면 교집합 리스트에 넣고 해당 문자를 B에서 삭제한다.. 이 과정에서 해당 문자가 알파벳이라면 합집합 리스트에 넣는다. 위의 과정을 거친 ..

[Level 1] 실패율

https://programmers.co.kr/learn/courses/30/lessons/42889 코딩테스트 연습 - 실패율 실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스 programmers.co.kr 첫 번째 접근 각 stage마다 해당 stage에 있는 사람의 수를 분자, stage 이상인 사람을 분모로 하여 해당 값을 stage 번호와 함께 리스트에 추가한다. 이후 리스트에서 실패율을 기준으로 내림차순 정렬하고 최종적으로 첫 번째 값부터 탐색해서 stage를 출력하도록 한다. 첫 번째 구현 - stage를 1부터 N까지 진행하여 - stages 리스트를 ..

[Level 1] 키패드 누르기

https://programmers.co.kr/learn/courses/30/lessons/67256 코딩테스트 연습 - 키패드 누르기 [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL" programmers.co.kr 접근 딕셔너리를 활용하여 각 번호를 key, 번호의 좌표를 value로 저장한다. 이후 해당 번호에 따라서 왼손과 오른손의 좌표를 이동하고 조건에 따라 최종해에 L과 R을 추가한다. 이렇게 번호의 좌표를 딕셔너리에 저장한 이유는 2, 5, 8, 0일 때..

[Level 1] 숫자 문자열과 영단어

https://programmers.co.kr/learn/courses/30/lessons/81301 코딩테스트 연습 - 숫자 문자열과 영단어 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자 programmers.co.kr 접근 숫자에 대한 영단어를 리스트에 저장하여 활용한다. 입력받은 문자열을 순차적으로 탐색하여 숫자일 때는 그대로 최종해에 추가하고 영문일 때는 임시로 저장하는 문자에 추가한다. 이 문자가 리스트안에 포함되어있을 때 해당 문자의 인덱스를 반환하고 문자열로 변환하여 최종해에 추가한다. 구현 - numbers라는 리스트에 인덱스는 숫자 값에는 인덱스에 해당..

[Level 2] 괄호 회전하기

https://programmers.co.kr/learn/courses/30/lessons/76502?language=python3# 코딩테스트 연습 - 괄호 회전하기 programmers.co.kr 접근 python의 deque를 통해 괄호열을 괄호열의 길이만큼 회전하였다. 이후 스택을 활용하여 올바른 괄호열인지 판단하였다. 구현 - 먼저 입력받은 괄호열을 deque에 저장한다. - 그리고 괄호열의 길이만큼 회전한다. - 회전한 괄호열에 대해 올바른 괄호열인지 판단하기위해 스택을 활용한다. - 여는 괄호일 때 스택에 push하고 - 닫는 괄호일 때는 스택의 top을 확인하여 짝이 맞을 때 pop한다. - 이 과정에서 스택에 비어있는데 닫는 괄호가 나오면 탐색을 종료하고 - 탐색을 끝까지 했을 때 스택이..

[Level 3] 베스트 앨범

https://programmers.co.kr/learn/courses/30/lessons/42579 코딩테스트 연습 - 베스트앨범 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 programmers.co.kr 접근 리스트와 딕셔너리를 활용하여 해를 구한다. 구현 - 먼저 장르를 key로 하여 (노래의 번호, 재생횟수)를 리스트에 저장한다. - genre_play_idx의 딕셔너리에는 장르별로 리스트를 item으로 갖고 해당 리스트에는 (노래번호, 재생횟수)가 원소로 저장되어 있다. for idx in range(N): genre = genres[idx] play =..

[Level 2] 게임 맵 최단거리

https://programmers.co.kr/learn/courses/30/lessons/1844 코딩테스트 연습 - 게임 맵 최단거리 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1 programmers.co.kr 접근 (0, 0)에서 출발하여 (N-1, M-1)까지 BFS를 실행하여 최단거리를 찾는다. 구현 - 2차원 리스트인 dist에 거리를 저장한다. - (N-1, M-1)에 저장된 값을 최종적으로 출력하며, 만약 0일 경우 -1을 출력하도록 한다. q = deque() N = len(maps) M = len(ma..

[Level 3] 섬 연결하기

programmers.co.kr/learn/courses/30/lessons/42861 코딩테스트 연습 - 섬 연결하기 4 [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] 4 programmers.co.kr 접근 문제를 읽었을 때 n개의 섬을 연결하는 최소신장트리를 구성하는 것을 알 수 있었고 크루스칼 알고리즘을 적용하였다. 구현 - 입력받은 costs를 비용을 기준으로 오름차순 정렬한다. - 이후 자신의 최상위 부모노드를 입력하기 위해 리스트 p를 선언하고 초기에는 자기자신을 가리키도록 한다. costs = sorted(costs, key=lambda x: x[2]) p = [i for i in range(n)] - 자신의 최상위 부모노드를 찾는 find_set함수를 구현하였..

728x90
반응형