본문 바로가기

알고리즘/Class 324

백준 BOJ 1764번 접근 방법 N과 M이 500000 이하라서 배열에 저장해서 contains를 하면 시간초과가 나는 문제다. HashSet을 이용하면 쉽게 해결할 수 있다. 주의할 점은 사전순으로 출력해야 되기 때문에, 정렬하고 출력해야한다. 코드 import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int m = in.nextInt(); HashSet set = new HashSet(); for(int i = 0; i < n; i++) set.add(in.next()); ArrayList answer = new ArrayLis.. 2022. 8. 19.
백준 BOJ 1697번 접근 방법 이동할 수 있는 경우는 +1, -1, x2 세 가지다. 이걸 그래프로 바꿔서 생각해보면, 최단경로 문제로 볼 수 있다. BFS를 사용해서 문제를 푼다면 실버 1 문제치고는 쉽게 풀 수 있다. BFS에 대한 설명은 이전 글을 참고하자. https://edvedv.tistory.com/4?category=1038364 백준 BOJ 1012번 접근 방법 인접한 배추들을 그래프 형태로 생각하면, DFS와 BFS를 사용하여 문제를 풀 수 있다. DFS, BFS 둘다 그래프를 탐색하는 방법이다. 그래프란, 정점(node)과 그 정점을 연결하는 간선(edge)으로 edvedv.tistory.com 다만 약간 다른 점이 있다면 카운트를 해야한다는 점인데, 이는 visit 배열을 boolean대신 int형으로.. 2022. 8. 19.
백준 BOJ 1676번 접근 방법 처음에 단순하게 팩토리얼 계산하고 charAt() 메소드로 비교해서 풀었는데 자료형의 한계로 실패했다. 다시 생각해보니 뒷자리에 0이 나오는 경우는 소인수분해해서 2 x 5 가 있을 때다. 이를 활용하면 쉽게 풀 수 있었다. 실제로 팩토리얼 값을 나열한 사진. 5의 배수마다 0의 개수가 증가한다. N의 5의 개수에 따라 count값을 더해주면 될 것이다. 코드 import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int N = in.nextInt(); int count = 0; while (N >= 5) { count += N / 5; N.. 2022. 8. 19.
백준 BOJ 1620번 접근 방법 HashMap을 사용한다면 어렵지 않은 문제다. 이 문제에서 문자열로 번호를 찾고, 번호로 문자열을 찾기 때문에 문자열과 번호가 서로 연결되어 있어야 한다. HashMap을 사용해서 하나는 key 값을 문자열, value를 번호로 만들고 다른 하나는 반대로 하면 쉽게 구현할 수 있다. 이후 입력받은 줄이 문자열인지 숫자인지만 구분해서 반환해주면 쉽게 해결. 코드 import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int N = in.nextInt(); int M = in.nextInt(); HashMap nameToNum = new Ha.. 2022. 8. 18.