목록백준 (8)
시간이 NullNull
음 이전의 미생물 격리를 풀고난 뒤 바로 풀었기 때문에 똑같은 조건에서 풀었는데 생각보다 효율이 좋지 않았다. 이러한 방법이 있다는 것을 참고만 하고 보시는 것을 추천드립니다. 1. 낚시꾼은 결국 j가 0일때 부터 j가 c-1일때 까지 잡는다 2. 상어 친구들이 움직인다. 정지한 좌표가 같을 경우 크기가 큰 상어가 작은 상어를 잡아 먹는다. ( 보통 상어가 커지게 하는 데 이 문제의 경우 상어의 크기는 항상 유지 된다.) 3. HashSet을 이용하여 잡아먹힌 상어를 제외하고 다시 list에 넣는다! 이 문제가 살짝 어려운 경우 이전 포스트인 미생물 격리를 한번 보고 온다면 이 설명이 더 편하게 이해가 갈 것이다. 예전과 다르게 왜 Queue가 아닌 list를 썼느냐고 물어본다면 예전에는 움직이고 서로 ..
Trie로 검색 혹은 이 글을 보러 오신 분은 전화번호 목록에 대해서 알 것이라고 생각하고 문제 설명은 넘어가겠습니다. 그리고 sort의 경우 본인이 구현하셔도 상관없지만 이 글에서 Point의 경우 Trie 이기에 라이브러리를 활용하였습니다. ( 그리고 sort의 경우 해주지 않으면 9112 다음에 911이 들어오면 문제가 발생하여 sort 해주었습니다. ) Trie의 개념의 경우 제가 이전에 써두었던 글을 참고하시면 더 이해가 잘 가실 것 같습니다. 글 링크 따윈 저는 상남자니까 걸어두지 않을께요 이 문제는 저번 문제와 다르게 번호가 들어왔을때 ( 예를 들어, 911 이 입력되었고 다음줄에 9112가 들어오면 ) 911 때문에 isTerminal이 true 인 상황에서 현재 자식노드의 2번 이 nul..
N+1개의 I와 N개의 O로 이루어져 있으면, I와 O이 교대로 나오는 문자열을 PN이라고 한다. P1 IOI P2 IOIOI P3 IOIOIOI PN IOIOI...OI (O가 N개) I와 O로만 이루어진 문자열 S와 정수 N이 주어졌을 때, S안에 PN이 몇 군데 포함되어 있는지 구하는 프로그램을 작성하시오. 첫째 줄에 N이 주어진다. 둘째 줄에는 S의 길이 M이 주어지며, 셋째 줄에 S가 주어진다. (1 ≤ N ≤ 1,000,000, 2N+1 ≤ M ≤ 1,000,000) 문제는 매우 간단하지만 어떻게 확인하느냐를 가지고 매우 고민했다. 처음에 I를 찾으면 내가 원하는 IOIOI 등등이 맞는지 확인하였으나 전체 배열을 돌면서 확인하기때문에 엄청난 횟수를 돌게 된다. ( for문만 돌게되면 충분히 가..
문제를 요약을 하면 1. 배열이 입력으로 들어온다. 2. 회전하는 명령어가 입력으로 들어온다. 3. 회전하는 명령어를 순서를 바꾸면서 실행하여 최소값을 찾는다. 참고로 저는 제 코드를 참고하시지 않는 것을 추천드립니다.... 정말 힘들게 짰어요 회전하는 명령어의 경우 중심점의 좌표와 좌표로부터의 거리? 좌표부터의 가로 혹은 세로 길이를 나타내고 무조건 시계방향으로 돌리면 된다. 나의 경우.... 정말 힘들게 생각했는데 문제를 풀 당시 시계방향으로 돌면서 모든 것을 돌리는 방법을 찾지 못했고 따라서 한줄씩 하면 어떨까라는 생각으로 풀었다. 코드를 보면 ( 이해하기 힘들지만....) 중심점을 기준으로 위의 가로줄, 밑의 가로줄, 오른쪽의 세로줄, 왼쪽의 세로줄을 하였고 이 경우 명령어가 (3,4,2) 일때 ..
전화번호 목록이 주어진다. 이때, 이 목록이 일관성이 있는지 없는지를 구하는 프로그램을 작성하시오. 전화번호 목록이 일관성을 유지하려면, 한 번호가 다른 번호의 접두어인 경우가 없어야 한다. 예를 들어, 전화번호 목록이 아래와 같은 경우를 생각해보자 긴급전화: 911 상근: 97 625 999 선영: 91 12 54 26 이 경우에 선영이에게 전화를 걸 수 있는 방법이 없다. 전화기를 들고 선영이 번호의 처음 세 자리를 누르는 순간 바로 긴급전화가 걸리기 때문이다. 따라서, 이 목록은 일관성이 없는 목록이다. 처음에 이 문제를 보고 TRIE 알고리즘을 떠올렸으나... 오늘 더 공부해보면서 약간 느낌만 알았으므로 다른 방법으로 푼 방법을 올리겠습니다. 이 문제의 경우 사실 시간만 충분하다면 모든 경우를 다..