👨‍🏫ps/🔟0️⃣백준

    [백준] 1976번 여행 가자 풀어보기 [Java]

    [백준] 1976번 여행 가자 풀어보기 [Java]

    알고리즘 문제를 푸는 언어를 자바로 바꾸고, 유니온 파인드 문제를 처음 풀어본다. 그래서 처음에는 bfs로 푸는 건가 하다가, 유니온 파인드 가 생각나서 풀 수 있었다. 👨‍🏫 풀이 다음 도시로 여행을 하려면, 다음 도시와 어떤 경로든 이어져 있어야 한다. 서로가 이어져 있는지 여부를 체크할 때는 유니온 파인드를 쓰면 된다. find로 서로가 같은 parent를 공유하고 있는지 여부를 찾고, 만약 같은 parent를 공유하고 있다면, 갈 수 있는 경로가 있다는 것으로 간주할 수 있다. 각 도시를 연결할 때는 값이 작은 것을 parent로 만든다라는 것을 따르면 된다! (큰 것으로 기준을 두어도 됨 일관성있게만 기준을 만들기) 만약 두 노드의 부모가 다르면, 갈 수 없는 루트인 것이다. 👨🏻‍💻 코드 pa..

    [백준] 17780번 새로운 게임 풀어보기[Java]

    [백준] 17780번 새로운 게임 풀어보기[Java]

    시뮬레이션은 시간이 오래걸린다,,, 이 문제도 한시간 반 풀었다,,, 중간에 실수도 했다,,,!! 실수를 하면, 찍어서 보는 것도 좋지만, 내 논리가 어디가 틀렸는지 한번 둘러보는 것도 좋을 거 같다,,!! 👨‍🏫 풀이 색들을 저장할 수 있는 map을 만들었고, chess들의 위치를 저장하는 chessHorse를 만들었다. chessHorse는 LinkedList 2차원 배열로 만들어서, 같은 위치에 있는 것들은 linkedList로 연결해줘서 쌓인 것 처럼 보이게 했다,,,!! 움직일 수 있는 말들, 즉 혼자이거나 맨 아래에 위치한 말들을 PriorityQueue에 넣어줬다. 말들은 순서대로 움직이기 때문에, 순서가 작은 순으로 우선순위를 설정해줬다! 다음 위치가 파란색인 경우, 나간 경우 움직이지 않..

    [백준] 13460번 구슬 탈출 2 풀어보기 [Java]

    [백준] 13460번 구슬 탈출 2 풀어보기 [Java]

    시뮬레이션 + bfs 문제였다. 역시나 시뮬레이션은 어렵고 시간이 오래걸렸다. 그것도 gold1이니까 더 오래걸렸다,,,, 실수를 하면 더 오래걸린다는거,,, 실패하면, 질문 검색 들어가서 반례 찾아보는 습관이 있는데, 스스로 찾아보는 습관을 들여야겠다,,, 👨‍🏫 풀이 우선 두 구슬이 같이 움직인다. 그래서 동일한 곳에 도달할 수 없다. 하나씩 움직여준다음, 동일한 곳에 위치해 있으면, 한 구슬을 옮겨줘야 한다!! 1. 빨간 구슬을 벽을 만나거나 구멍을 만날 때까지 움직이기. 2. 파란 구슬을 벽을 만나거나 구멍을 만날 때까지 움직이기. 3. 파란 구슬이 구멍을 통과했다면, 이 case는 넘어간다. 4. 만약 빨간 구슬만 구멍을 통과했다면, 정답!! bfs이기 때문에 그냥 return 해주면 된다. 5..

    [백준] 2629번 양팔저울 풀어보기 [Java]

    [백준] 2629번 양팔저울 풀어보기 [Java]

    관계식이 있는 dp문제였다. 관계식만 잘 구하면 잘풀수 있어 골드3까지는 아닌거 같다!!(내가 뭐라고 평가하나,,,,ㅋㅋㅋ) 👨‍🏫 풀이 나는 세가지 경우를 나눠서 풀었다. 1. 지금 추를 더하는 경우 2. 지금 추를 더하지 않고 넘어가는 경우 3. 지금의 무게가 추보다 작다면, 추에서 현재 무게를 빼고, 크다면, 현재 무게에서 추를 뺀다. Base case 1. weight 음수가 되면 안되고(원래 0이 될일도 없기 때문에 0을 포함해줘야 됐지만, 나는 첫 시작 무게를 0으로 설정을 해줘서 0을 포함해주지 않았다.) 40000보다 크면 안된다. 2. 주어진 추는 한번만 사용가능하기 때문에 주어진 추를 다 방문했는지 체크 👨🏻‍💻 코드 package 번2629; import java.io.Buffered..

    [백준] 1405번 미친 로봇 풀어보기 [Java]

    [백준] 1405번 미친 로봇 풀어보기 [Java]

    단순한 DFS문제였다. 퍼센트를 구하는 거여서, 약간 어떻게 구하지라는 조금의 의문은 있었지만 단순했다!! 👨‍🏫 풀이 인풋을 100으로 나눠주어, 퍼센트로 나타내준다!! 맵이 아니기 때문에, 나가는 것이 존재하지 않기 때문에 충분히 큰 visited를 체크하는 배열을 만들어준다.(움직일 수 있는 최대 숫자가 14이기 때문에 나는 [30][30] 배열을 만들었다) dfs를 진행하면 된다. 만약 N만큼 움직였다면, 현재 퍼센트를 ans에 더해준다. 이전에 방문했던 적이 있다면 단순하지 않은 이동경로이기 때문에 가지 않는다!! 👨🏻‍💻 코드 package 번1405; import java.io.BufferedReader; import java.io.IOException; import java.io.Input..