목록Java (44)
시간이 NullNull
1초에 한번씩 원자들이 움직이는데 충돌할 경우 그대로 에너지를 방출하고 소멸한다 이 때 방출된 에너지의 총합을 구하는 문제이다. 문제의 이름부터 아주 고정관념이 한참 생겨 무조건 시뮬레이션으로 풀어야지! 라는 생각에 여러번 틀렸던 문제이다. 하지만 생각해보면 충돌할 경우만 생각하여 에너지만 구해주고 끝내면 되는 문제이다. ( 시간이 무한히 흐른다면 ( 이 문제의 경우 최대 2000초(문제 내에서 시간) ) 충돌되지 않은 원자들은 밖으로 빠져 나간다. 빠져나간 원자들은 고려하지 않아도 된다. 이 원자들은 평생 만날 일이 없기 때문이다.) 주변에 어떤 친구는 0초부터 2000초 까지 for문을 통해서 모든 경우를 다해준 경우도 있었고 이전 포스트들에서 본 것처럼 또 충돌 나는 것들은 여러개의 Map을 통해서..
음 이전의 미생물 격리를 풀고난 뒤 바로 풀었기 때문에 똑같은 조건에서 풀었는데 생각보다 효율이 좋지 않았다. 이러한 방법이 있다는 것을 참고만 하고 보시는 것을 추천드립니다. 1. 낚시꾼은 결국 j가 0일때 부터 j가 c-1일때 까지 잡는다 2. 상어 친구들이 움직인다. 정지한 좌표가 같을 경우 크기가 큰 상어가 작은 상어를 잡아 먹는다. ( 보통 상어가 커지게 하는 데 이 문제의 경우 상어의 크기는 항상 유지 된다.) 3. HashSet을 이용하여 잡아먹힌 상어를 제외하고 다시 list에 넣는다! 이 문제가 살짝 어려운 경우 이전 포스트인 미생물 격리를 한번 보고 온다면 이 설명이 더 편하게 이해가 갈 것이다. 예전과 다르게 왜 Queue가 아닌 list를 썼느냐고 물어본다면 예전에는 움직이고 서로 ..
이 문제는 무려 5초를 주었다는 점과 N의 수가 작아 N*N을 하더라도 10000인 점 미생물의 수가 1000개 이하라는 점이 무조건 시뮬레이션이라는 생각이 들어 쉽게 풀게 되었다. 내가 사용한 변수들은 int[][] maxMap, int[][] dirMap, int[][] sumMap 이다 이름만 봐도 어떤 용도인지 알겠으나 나중에 더 자세히 설명하겠다. 1. m일 동안 진행하기 때문에 0~m-1까지 for문 돌기 2. 미생물이 합쳐지기도 죽기도 하기때문에 list가 아닌 Queue 사용 하였는데 하루동안 한칸만 움직여야 하기때문에 Q의 사이즈를 이용하여 그만큼만 for문을 돌아주었다. 3. 문제에 나와있듯이 한칸 움직인 후 배열의 가장 바깥쪽 칸들에 가면 크기를 반으로 줄이고 방향을 반대로 바꿔주었다..
주요 포인트! 1. 09:00 부터 n회 t분 간격으로 역에 도착한다. 나의 경우 09:00 부터라는 것을 제대로 못봐 문제가 이해가 되지 않아 한참동안 고민을 하였다. 2. m명을 태우면 더이상 태울 수 없다 ( 단, 기다리고 있는 줄은 유지된다. ) 이를 기준으로 나는 그냥 단순히 09:00 부터 각 셔틀버스마다 태울 수 있는 만큼 태우자 그리고 끝난 뒤에 1. 마지막 버스에 m명이 가득 차 있다면 마지막에 탄사람보다 1분 일찍오자! 2. 마지막 버스에 자리가 빈다면 마지막 버스가 도착할 시점에 오도록 하자! 이를 구현하기 위해서 우선 크루들이 도착하는 시간을 오름차순으로 정렬해야한다. 그래야 시간 순으로 버스에 태울 수 있기 때문이다. 그리고 시간 계산과 대소관계 비교를 원활하게 하기 위해서 시간 ..
문제를 쉽게 설명하면 1. go, gone, guild 라는 String 배열이 주어지면 이를 학습시킨다. 2. g를 입력하였을때 go와 gone가 나오므로 한번에 자동완성이 안된다. 3. 하지만 go 까지 하면 문자가 다 ( 자동 ) 완성이 되었다. 4. gon까지 입력시 gon으로 시작하는 문자는 gone 뿐이므로 gone을 완성시켜준다. 5. gu까지 입력시 gu로 시작하는 문자는 guild 이기때문에 guild를 완성시켜준다. 따라서 g + o + g + o + n + g + u 가 되어 7번 입력시 문자가 전부 자동완성 된다. 이를 풀기 위해서 지난번에 소개했던 Trie 알고리즘을 썼으며 1. 문자가 주어지면 Trie 트리를 만들고 2. 다음번에 문자 하나씩 읽으면서 ( 자동 ) 완성이 될때까지..