문제 입출력 형식 입출력 예제 솔루션 좌표를 저장할 Point 클래스를 만든다. 중요한 점은 오버라이딩 함수들이다. hashCode()와 equals() 함수인데, 오버라이딩 한 이유는 Point 객체끼리 동일한 객체 비교가 아닌 동일한 좌표인지 비교할 수 있도록 하기 위함이다. hashCode() & equals() - https://soobarkbar.tistory.com/94 사용한 변수들 : rmlist - HashSet 자료구조이며, 부술 블록들을 저장해 놓을 객체 변수이다. chrboard - 주어진 String형 배열 board를 char형으로 좀 더 편리하게 다루기 위한 2차원 배열이다. canBreak - 아직 부술 블록들이 남아있는가 (4개 묶음 블록이 존재하는가) 를 판단하고 게임을 ..
equals() ? 두 객체내 데이터 (내용) 이 일치하는지 확인하는 메소드이다. 이 메소드가 왜 필요한지? 두 개의 Person 객체가 있다고 해볼 때, 이 두 객체를 비교해보자. 결과는 어떻게 나올까? 위 객체 코드 비교에 대한 결과는 아래와 같다. Why ? person1과 person2는 동일한 객체가 아닌 각각 개별적인 객체이기 때문이다. 동일한 객체라는 것은 메모리에 담긴 객체를 동일하게 참조한다는 것이며, 아래와 같다. 따라서 결과 또한 바뀌게 된다. 그렇다면 의문이 생긴다. equals는 내용을 비교한다고 했는데, 왜 맨 위의 예제에서 equals로 비교 한 것도 false가 나온 것인지? 결론은 간단하다. Object의 equals 함수 코드 구현을 보면 다음과 같기 때문이다. 코드를 보..
문제 입출력 형식 입출력 예제 솔루션 좌표를 저장하기 위한 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 패턴으..
문제 조건 입출력 예제 솔루션 스택 자료구조를 사용하였다. why ?) FILO 형식으로 뒤에서부터 진행하고, 신호가 수신된 탑은 고려할 필요가 없어 스택을 사용하면 다루기가 편할거라 생각. 몇 번째 탑이고, 높이 크기가 얼마나 되는지 관리하기 위해 Top 클래스를 정의한다. idx는 현재 비교하려는 탑이 몇 번째 인덱스인지 현재 위치를 의미하는 변수이다. 스택 두개를 만들어 stack은 입력으로 주어진 탑들을 순서대로 집어넣고 다시 꺼내기 위한 변수이며, wait은 이전 탑보다 높이가 큰 탑들을 담아놓기 위한 스택 (자기보다 높이가 큰 탑이 나올때까지 대기) 이다. stack에 현재 탑 정보를 Top 객체로 만들어 Push() 한다. 그리고 처음 answer에 모두 0으로 초기화 (수신이 되지 않는다면..
문제 조건 입출력 형식 입출력 예제 솔루션 링크드 리스트 자료구조를 사용하였다. Why ?) 큐를 사용할까 고민했지만 FIFO 형태이므로, 큐 중간 위치에 있는 데이터를 제거하지 못하기 때문에 큐는 적합하지 않다고 판단하여 링크드 리스트를 채택. 먼저 특이한 상황을 처리한다. 캐시 사이즈가 0 이라면, 캐시에 쌓이는 것이 하나도 없으므로 모두 캐시 미스가 발생한다. 따라서 아래의 반복문을 갈 필요도 없이 총 cities 갯수 x 5를 반환해주면 된다. 캐시 사이즈가 0이 아니라면, cities 갯수만큼 반복문을 수행한다. 대소문자 구분이 없다고 했으므로, cities[i]를 소문자로 바꾼다. (대문자로 바꿔도 무방) 먼저 시간을 5만큼 더해준다. 캐시에 현재 비교하려는 cities[i]가 존재한다면, 캐..
단순한 문자열 검색 문자열 'ACBABCBABC' 에서 'ABC'를 찾는다고 해보자. 단순한 방법은 'ABC'를 한 칸씩 옮기면서 비교하는 것이다. A C B A B C B A B C A B C -> 다르다. A C B A B C B A B C A B C -> 다르다. A C B A B C B A B C A B C -> 다르다. A C B A B C B A B C A B C -> 같다. A C B A B C B A B C A B C -> 다르다. A C B A B C B A B C A B C -> 다르다. A C B A B C B A B C A B C -> 같다. 문자열 끝까지 진행하며, 여기서는 문자열 패턴 'ABC'가 총 2번 등장하는 것을 알 수 있다. ACBABCBABC 하지만, 이 단순 비교는 ..