1. 문제 2. 접근부메랑을 만들기 위해서는 3 depth가 필요하고 부메랑을 만든 결과가 이어지면서 탐색을 진행해야한다.-> 백트랙킹 이용 어떤 데이터가 필요?-> 완성된 부메랑과 방문한 좌표를 저장할 boolean 배열, depth depth가 3이 되어서 부메랑이 만들어진 후엔?-> 새로운 부메랑을 만들어야 함. 하지만 다음 좌표의 기준이 모호함. 전체 좌표 중 방문 안한 모든 좌표?이러면 처음 함수를 호출할 때랑 달라지는 것이 없어짐 --> 시도 했지만 시간 초과 다른 방법 부메랑을 만들 때 DFS 방식으로 depth가 3이 될 때까지 계속 호출하는 것이 아닌, 부메랑이 만들어질 수 있는지 바로 체크하기-> 현재 좌표를 제외하면 딱 2좌표만 확인하면 되기 때문에 가능함. 그리고 이 방법은 부메..
1. 문제 2. 접근다각형은 삼각형으로 구성되니깐 한 점을 고정 시킨 다음 두 점을 이동시켜서 삼각형의 넓이를 구해주면 되겠구나 했다.근데 계속해도 틀렸다고 나오길래 포기했다. 나는 처음 들어보는 신발끈 공식을 이용하는 풀이였다. 삼각형은 왜 안되나 봤더니 아래그림에서 점 P2, P3, P4으로 삼각형의 넓이 공식을 적용하면 제대로 된 넓이를 구할 수 없었다. 신발끈 공식은 시계 반대(정) 방향으로 돌면서 두 점을 정해 각 x, y를 곱해주어서 빼준다. 이때 마지막 점은 다시 첫 점으로 돌아와야 한다.코드로 구현하면 다음과 같다.for(int i=0; i 이때 중요한 점은 sum에다가 값을 더할 때 절대값으로 붙이면 안되는 것이다. 다 더한 다음에 결과에 절대값을 붙여야한다. 부호가 다른 것도 다 적..
1. 문제 2. 접근이 문제는 알파벳 N개를 사용해서 최대 연속된 문자열의 길이를 구하는 것이다. 처음에 N이 2로 고정된 줄 알고 완탐 돌릴려고 했는데 1부터 26까지 주어지는 것이었다. 그래서 생각한 아이디어는 set과 투 포인터를 이용한 풀이었다. 중복이 허용되지 않는 set으로 알파벳을 저장하고 set의 사이즈가 N을 넘어가면 사이즈가 N이 될 때가지 빼주면 되겠구나 했다. 하지만 'cacc' 처럼 c가 연속적으로 나오지 않는 경우를 고려하지 못한 풀이였다. 단순히 c를 만나면 다음 문자열이 c가 아닐 때까지 빼주고 c를 set에서 삭제했더니 a 뒤에 나오는 cc를 삭제하지 않고 있었다. 그래서 `HashMap`을 이용해서 카운팅한 문자의 카운트를 저장하고, 값이 0이 될 때 map에서 삭제해..
1. 문제 2. 접근단순히 괄호 찾아서 지우는 문제인 줄 알았는데 괄호 쌍의 조합을 구해야 하는 문제였다. 처음엔 스택만 이용하다가 괄호가 2개 이상 동시에 지워져야 한다는 것을 깨닫고 Set을 이용하여 괄호의 쌍 인덱스를 저장했었다. 하지만 구현이 계속 어려워져서 원점으로 돌아가서 다시 생각했다. 중간에 문제를 잘못 이해한 것을 깨달았으면 구현하고 있는 것을 계속 붙잡고 있을게 아니라 처음부터 다시 생각하는게 오히려 빠른 것 같다. 그냥 다시 생각하자. 처음부터 다시 생각한 결과, 괄호의 쌍들을 구해서 조합으로 뽑는 것으로 결정했다. 괄호의 쌍은 스택을 이용해서 구하고 요소 하나로 저장한다. 그 후 백트랙킹으로 괄호의 쌍을 1개부터 10개까지 선택한다. 3. 코드import java.io.Buffe..
1. 문제 2. 접근문제를 읽어보면 특정 알고리즘을 이용하는 것이 아니라 구현 문제임을 알 수 있다. 계속 구현 문제를 풀면서 느낀 것은 구현 문제는 처음부터 잘 구현해야한다!! 그렇지 않으면 디버깅 시간이나 실수 고치는 시간이 더 드는 것 같다. 그래서 구현 문제임을 파악하고 구체적인 설계부터 시작했다. 문제에서 친절하게 각 단계마다 설명을 줘서 단계별로 함수를 나눴다.고민한 점은 내려가는 위치, 올라가는 위치를 담을 고정 위치 정보, 움직이는 벨트 정보, 인형의 정보를 겹치지 않고 어떻게 저장할까 였다. class를 너무 많이 만들면 오히려 헷갈려서 최대한 줄이면서 표현하려고 했다. 처음엔 int[] 배열로 각 벨트의 내구도를 저장하고 `Doll` 클래스로 인형의 생성카운트, 현재 위치를 저장했다. ..