코딩테스트-알고리즘/백준 BOJ 39

[백준 BOJ/Silver II] 11724번 : 연결 요소의 개수

https://www.acmicpc.net/problem/11724 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어 www.acmicpc.net - 방향이 없는 그래프는 양방향으로 값을 넣어줘야한다 예를 들어 (1, 5) 연결과 (5, 1) 연결이 같으므로 처음 입력받을때 양쪽 모두 1이 들어가도록 해주어야한다 - 해당 정점을 확인했는지 표시해주는 boolean 배열도 필요하다 - 1번 정점을 시작으로 그거와 연결된 정점들을 확인하며 아직 방문하지 않은 정점이라면 큐에 넣고빼..

[백준 BOJ/Gold V] 10026번 : 적록색약

https://www.acmicpc.net/problem/10026 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 이렇게 풀어도 되는걸까,,? 라는 생각으로 물음표 가득 띄운채 풀었는데 시간도 메모리도 엄청 여유롭게 통과해서 놀랐다😮😮😮 이런 방식으로 풀면 답은 나오겠다 싶긴 했지만 같은 과정을 여러번 반복하는 느낌이라서 시간이든 메모리든 초과가 나올 줄 알았다 글 작성하고나서 다른 사람들의 풀이를 찾아볼 예정,, DFS 알고리즘을 이용하였고 문자별로 각각 카운트해주었다 전체 grid 배열을 돌면서 -..

[백준 BOJ/Bronze III] 2501번 : 약수 구하기

https://www.acmicpc.net/problem/2501 2501번: 약수 구하기 첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다. www.acmicpc.net 처음에는 나눠서 나머지가 0이면 리스트에 넣어주고 K번째로 들어가는게 생기면 답을 출력하는걸 생각했었는데 코드를 쓰다보니 그렇게까지 하지 않고 단순하게 해도 답이 나올거같아서 수정했다 나머지가 0이면 카운트를 세어주고 K번째가 나오는 순간 그때의 수를 result에 넣어주고 for문을 나와서 출력하면 끝!! 최종 코드 import java.util.Scanner; public class Main { public static void main(String[] args) {..

[백준 BOJ/Gold V] 12904번 : A와 B

https://www.acmicpc.net/problem/12904 12904번: A와 B 수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수 www.acmicpc.net 문제 - 두 문자열 S와 T가 주어졌을 때, S를 T로 바꾸는 게임 - 문자열을 바꿀 때는 다음과 같은 두 가지 연산만 가능 1) 문자열의 뒤에 A를 추가한다. 2) 문자열을 뒤집고 뒤에 B를 추가한다. -주어진 조건을 이용해서 S를 T로 만들 수 있는지 없는지 알아내는 프로그램을 작성하시오. 처음에는 S에서 T로 만드는 여러가지 경우의 수를 생각했다 생각할수..

[백준 BOJ/Gold V] 7576번 : 토마토

https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 재밌는(?) 문제였다 문제와 예제 입/출력을 보면서 생각했던것들을 정리해보자면 문제 - 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토의 인접한 곳은 왼쪽, 오른쪽, 앞, 뒤 네 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는 영향을 주지 못하며, 토마토가 혼자 저절로 익는 경우..

[백준 BOJ/Gold IV] 15961번 : 회전 초밥

https://www.acmicpc.net/problem/15961 15961번: 회전 초밥 첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 3,000,000, 2 ≤ d ≤ 3,000, 2 www.acmicpc.net 이전에 풀었던 ↓ 이 문제랑 같은 문제인데 범위가 훨씬 더 큰 15961번! https://fruits2lim.tistory.com/entry/%EB%B0%B1%EC%A4%80-BOJSilver-I-1940%EB%B2%88-%ED%9A%8C%EC%A0%84-%EC%B4%88%EB%B0%A5 [백준 BOJ/Silver I] 2531번 : 회전 초밥 htt..

[백준 BOJ/Silver I] 2531번 : 회전 초밥

https://www.acmicpc.net/problem/2531 2531번: 회전 초밥 첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 30,000, 2 ≤ d ≤ 3,000, 2 ≤ www.acmicpc.net - 먹을 수 있는 서로 다른 초밥의 가짓수를 구해야하기 때문에 같은 번호가 들어가지 않도록 중복을 제거해주기 위해 HashSet을 사용하여 먹은 초밥을 추가해주었다. - k개의 초밥을 담은 후 쿠폰에 적힌 c 초밥이 포함되어 있지 않다면 하나는 무료 증정되므로 담은 초밥 개수에 +1을 해주어야한다 - 중복이 있어서 sushi 사이즈가 k가 되지 않았더라도 사..

[백준 BOJ/Silver IV] 1940번 : 주몽

https://www.acmicpc.net/problem/1940 1940번: 주몽 첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고 www.acmicpc.net 두개의 재료를 합쳐서 M이 되는지 확인하는 과정을 반복하면 된다 주의해야될 점은 다른 두개의 재료가 합쳐져야하기 때문에 i의 범위는 0~N-1 / j의 범위는 i+1~N 으로 해야한다! import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java...

[백준 BOJ/Silver I] 2178번 : 미로 탐색

https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net dfs 문제는 여러번 풀어봤는데 bfs 문제는 마음속거리감이 심해서ㅠㅠㅋㅋㅋㅋㅋㅋㅋ 계속 피했었다 그래도 이제 bfs도 극복해야하기에 많이 풀어보려한다 방식은 dfs와 어느정도 비슷하면서 Queue를 이용한다는 점이 다른데 아직 익숙하지 않아서 여러번 읽어보며 익히려고 노력했다 우선 dfs 방식을 이용해서 풀어보았는데 이건 상하좌우 확인하며 끝까지 파고들기 때문에 최소의 칸을 구하기에는 효율적이지 않았고, 가까운 것들을 모두 확..

[백준 BOJ/Silver III] 2606번 : 바이러스

https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍 www.acmicpc.net package BOJ2606; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int computer; static int con; static int[][] network; s..