Algorithm/Programmers 48

[프로그래머스] 오픈채팅방 - Java

문제 설명 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 접근 방법 입력받은 사용자별 기록들(String[] record)에 대해 순서대로 split를 통해 상태(Enter, Leave, Change), 아이디, 닉네임을 분리하고 별도의 UserState 구조체를 선언하여 사용자의 상태와 아이디를 저장하여 List 자료구조에 add 합니다. 다만 Change의 경우 기존 사용자의 닉네임을 바꾸는 작업이므로 UserState에 포함시키지 않습니다. UserState의 구조체는 다음과 같이 선언해주었습니다. s..

[프로그래머스] 문자열 압축 - Java

문제 설명 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문 programmers.co.kr 접근 방법 (1 단위로 압축 시) 문자열의 첫번째 문자를 가지고 두번째, 세번째 등 각각의 문자를 순서대로 비교하면서 일치하는지 여부를 검사합니다. (1번 검사 작업에 대해) 일치하는 경우 multiple 변수(초기값 1)의 값을 1씩 증가시킵니다. (1번 검사 작업에 대해) 일치하지 않는 경우 별도의 압축 문자열(zipString) 변수에 multiple 값(문자열 형태로)과 첫번째 문자를 추가 할당해줍니다. 이후 두번째 문자를 가지고 세번째..

[프로그래머스] 메뉴 리뉴얼 - Java

문제 설명 코딩테스트 연습 - 메뉴 리뉴얼 레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서 programmers.co.kr 풀이 회고 해당 문제를 풀기 위해 접근한 방법으로는 다음과 같습니다. 1. DFS를 이용하여 손님들이 주문한 메뉴들(String[] orders)로부터 구성 가능한 메뉴의 조합을 구합니다. - 이때 조합의 개수는 문제에서 주어지는 단품 메뉴 개수(int[] course)를 이용하여 정합니다. 2. HashMap을 이용하여 메뉴의 조합별 개수를 카운팅(counting))합니다. 3. 가장 많이 조합되었던 메뉴의 조합을 탐색합니다. 우선 특정 손님이 주문한..

[프로그래머스] 모음 사전 - Java

문제 설명 코딩테스트 연습 - 모음사전 사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니 programmers.co.kr 풀이 회고 해당 문제는 DFS를 이용하여 풀이할 수 있었습니다. 우선 문제에서 요구하는 것은 'A', 'E', 'I', 'O', 'U'로만 이루어져 있는 길이 1이상 5 이하의 단어 사전(사전순으로 정렬됨)에서 특정 단어를 찾고자 할 때 해당 단어가 몇 번째 단어인지를 구하는 것입니다. DFS를 통하여 A, E, I, O, U 사전순으로 조합된 단어들을 탐색했는데, 이때 하나의 단어(예를 들어, 'A')로..

[프로그래머스] 전력망을 둘로 나누기 - Java

문제 설명 코딩테스트 연습 - 전력망을 둘로 나누기 9 [[1,3],[2,3],[3,4],[4,5],[4,6],[4,7],[7,8],[7,9]] 3 7 [[1,2],[2,7],[3,7],[3,4],[4,5],[6,7]] 1 programmers.co.kr 풀이 회고 해당 문제는 BFS를 통해 해결할 수 있었습니다. 우선 해당 문제에서 요구하는 것은 특정 전선을 하나 끊었을 때 두 개로 나뉘어진 전력망의 송전탑의 개수의 차이에 대한 최솟값입니다. 이를 구하기 위해 문제에 접근한 방식으로는 다음과 같습니다. 1. 우선 송전탑의 개수 n이 2 또는 3인 경우 결과값이 n - 2로 정해져있으므로 이는 별도 if문으로 결과값을 반환하도록 했습니다. if (n == 2 || n == 3) { return n - 2..