오픈채팅방 문제 설명 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오픈 채팅방을 개설한 사람을 위해, 다양한 사람들이 들어오고, 나가는 것을 지켜볼 수 있는 관리자창을 만들기로 했다. 채팅방에 누군가 들어오면 다음 메시지가 출력된다. "[닉네임]님이 들어왔습니다." 채팅방에서 누군가 나가면 다음 메시지가 출력된다. "[닉네임]님이 나갔습니다." 채팅방에서 닉네임을 변경하는 방법은 다음과 같이 두 가지이다. 채팅방을 나간 후, 새로운 닉네임으로 다시 들어간다. 채팅방에서 닉네임을 변경한다. 닉네임을 변경할 때는 기존에 채팅방에 출력되어 있던 메시지의 닉네임도 전부 변경된다. 예를 들..
문제 입출력 형식 입출력 예제 솔루션 KMP 알고리즘을 그대로 구현하면 되는 문제이다. KMP : https://soobarkbar.tistory.com/80?category=824428 제출할 때 주의할 점은 인덱스가 1부터 시작하므로, 패턴 인덱스를 찾았을 때 +1이 아닌 +2를 해준다. 피드백 pi배열을 만들 때 (getPi의 for 반복문), i는 1부터 수행 해야 한다 (0부터 수행 했음). KMP에서 pi배열을 만들기 위한 파라미터로 패턴 문자열 (pattern) 전달 해야 한다 (전체 문자열인 text를 전달했음). Code 전체 코드 : Code 실패 함수 (Failure Function) 인 pi 배열을 얻는 함수 (getPi). 문자열에서 특정한 패턴이 위치한 인덱스를 얻는 함수 (KM..
문제 조건 입출력 예제 솔루션 Trie (트라이) 자료구조를 사용한다. 트라이 : https://soobarkbar.tistory.com/71?category=824429 Why 트라이 ?) 검색속도가 빠르기도 하고, 문자열의 끝을 알려주는 isEndofNumber를 통해 접두사인지를 확인할 수 있기 때문. 위 URL과의 차이점 TrieNode 클래스의 isExistedChildren() 함수. Trie 클래스의 isPrefix(String key) 함수. 코드 설명 Trie 객체를 생성한다. Trie에 입력으로 주어진 phone_book 문자열들을 모두 삽입한다 (Insert). 모두 삽입된 Trie에 대해 다시 처음부터 phone_book의 문자열들에 대해 접두사 (Prefix) 인지 확인하는 작업 ..
문제 조건 입출력 예제 솔루션 본인이 생각한 방법은 아래와 같다. 모든 문자열이 알파벳 대문자로만 구성되어 있으므로, 길이가 26 (알파벳 갯수) 인 boolean 배열을 만들어서 처리해보자. 유저들이 만든 스킬트리의 문자를 조회하며, 이 스킬이 가능한지를 possible 배열을 조회한다. 가능하다면 문자열 끝까지 여부를 확인하고, 가능하지 않다면 중단한다. 코드 설명 길이 26의 배열 possible을 만들고, 모두 true로 초기화한다. skill (순서가 정해진 스킬) 의 첫 번째 문자를 제외하고 나머지 skill 문자의 possible을 false로 바꾼다. skill_trees (유저가 만든 스킬트리) 길이만큼 반복문을 수행한다. ispos는 스킬트리가 가능한지 여부를 체크하는 변수이며, cpp..
문제 입출력 형식 입출력 예제 솔루션 좌표를 저장할 Point 클래스를 만든다. 중요한 점은 오버라이딩 함수들이다. hashCode()와 equals() 함수인데, 오버라이딩 한 이유는 Point 객체끼리 동일한 객체 비교가 아닌 동일한 좌표인지 비교할 수 있도록 하기 위함이다. hashCode() & equals() - https://soobarkbar.tistory.com/94 사용한 변수들 : rmlist - HashSet 자료구조이며, 부술 블록들을 저장해 놓을 객체 변수이다. chrboard - 주어진 String형 배열 board를 char형으로 좀 더 편리하게 다루기 위한 2차원 배열이다. canBreak - 아직 부술 블록들이 남아있는가 (4개 묶음 블록이 존재하는가) 를 판단하고 게임을 ..
문제 입출력 형식 입출력 예제 솔루션 좌표를 저장하기 위한 Point 클래스를 정의하였다. 답을 제출하기 위한 answer 배열 (각 인덱스 -> 0 : 영역의 총 갯수, 1 : 최대 영역의 넓이), 해당 지점을 방문했는지 여부를 체크하는 visited 배열 (picture와 동일한 크기로) 을 만들어줬다. visitied 배열을 모두 false로 초기화 해준다. picture의 모든 지점을 방문하기 위해 2중 for 루프 (x좌표, y좌표) 를 수행한다. picture[x][y] 지점을 방문한 적이 있거나 (visited[x][y] == true), 해당 지점이 영역이 아니라면 (picture[x][y] == 0), 다른 지점을 확인한다. 조건이 충족하지 않는다면, 영역이므로 넓이 우선 탐색 (BFS)..
문제 조건 입출력 예제 솔루션 주식 정보를 저장하는 Stock 클래스를 만들었다. Why ?) 인덱스와 가격을 함께 다루기 위해서. Stock 객체를 다루는 스택 자료구조를 사용하였다. prices의 길이만큼 반복문을 수행한다. 스택이 비어 있거나 (아직 아무것도 담겨 있지 않거나 이전에 가격이 최하로 떨어져 스택이 모두 비워진 경우), 현재 스택의 맨 꼭대기에 있는 주식 가격이 현재 비교하려는 i번째의 prices[i] 보다 크지 않다면 (주식 가격이 내려가지 않았다는 의미), 스택에 현재 비교하려는 주식을 넣어준다 (Push()). 현재 스택의 꼭대기에 있는 주식의 가격이 더 크다면, 스택 내 주식 가격이 작아지거나 스택이 빌때까지 스택에서 뽑아낸다 (Pop()). 그리고 뽑아낸 주식이 지속된 시간은..
문제 조건 입출력 예제 솔루션 각 학생의 점수를 담을 배열인 score, 답을 저장할 answer, 그리고 가장 많이 맞춘 문제 수를 저장 할 max를 선언한다. pt2, pt3는 2번, 3번 학생이 답을 맞추는 패턴을 저장한 배열이다. 먼저 score 배열을 0으로 초기화 한다. 문제 갯수만큼 반복문을 수행한다. 1번 학생이 답을 맞췄는지 확인한다. 1번 학생은 순차대로 1, 2, 3, 4, 5번을 선택함으로 따로 배열을 만들 필요없이 비교하면 된다. 수식은 i % 5 + 1 인데, 5개를 주기로 패턴이 반복되며 답은 1 ~ 5 까지이므로 + 1을 해준다. 답안을 비교한 점수와 max를 비교하여 갱신한다. 2번 학생이 답을 맞췄는지 비교한다. 2번 학생은 2, 1, 2, 3, 2, 4, 2, 5 패턴으..