백준

문제https://www.acmicpc.net/problem/1622 풀이처음에 문제를 제대로 안 읽고 안일하게 생각하고 접근했다가 틀렸다..  a문자열 내에도 존재하고 b문자열 내에도 존재하는 부분 수열을 구해야 하는데, a문자열을 반복문으로 돌면서 알파벳이 문자열 b에도 존재하기만 하면 부분 순열로 처리한 후 Set에 넣어버렸다.. abcc, deccc와 같은 경우 부분 수열이 cc인데 위의 방법으로 코드를 짤 경우 부분 수열이 c로 처리되기에 당연히 틀릴 수 밖에 없다.// 틀린 답안import java.util.*;import java.io.*;class Main { public static void main(String[] args) throws IOException { Bu..
문제https://www.acmicpc.net/problem/15558 풀이모든 경로를 탐색하며 목표점인 N칸 이상을 넘어갈 수 있는지 판별하는 문제이다. 손으로 그림 몇 번 그려보니 bfs로 해결이 가능할 것 같아서 bfs 알고리즘을 활용하였다. 칸을 이동하는 경우 중 반대편 줄의 i + k칸으로 이동하는 경우 선언한 int변수 isLeft의 값을 toggle 작업(1이면 0으로 바꾸고, 0이면 1로 바꾸기)을 해주어야 했는데, 어떻게 해야할지 고민을 좀 했다.. 비트연산자 XOR로 변환을 했는데 생각해보니 isLeft = 1 - isLeft로도 변환이 가능하다...! 사실 기존에 isLeft를 boolean 변수로 선언해서 사용하긴 했는데 if 분기가 많아 코드가 지저분해 보여서 isLeft를 int..
문제https://www.acmicpc.net/problem/14912 풀이간단한 브루트포스 문제다. 반복문을 통해 1부터 n까지의 숫자 num에 주어진 값 d가 총 몇 번 나타나는지 구하면 되는 문제이다. 다만 주의할 점은 d가 num에 포함되는지 판별하기 위해서는 num을 String타입으로, d를 char타입으로 변환하여 비교를 진행해야 한다. 2중 for문을 사용할 수도 있지만 stream의 filter를 사용하여 문제를 해결했다.import java.util.*;import java.io.*;class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); ..
문제https://www.acmicpc.net/problem/10282 풀이처음에 DFS / BFS인 줄 알았는데 노드 간에 weight가 존재하는 문제인걸 확인하고 Dijkstra 알고리즘으로 접근하였다.DFS / BFS와는 다르게 각 노드 간에 거리가 존재하기 때문에 노드마다 방문을 진행하면서 시작 노드 c부터 해당 노드까지의 최단거리를 매번 갱신해주어야 한다! 아래와 같이 1~3번 노드가 존재하고 각 노드 간 weight가 존재한다고 가정해 보자. 1번 노드에서 시작해서 3번노드까지의 최단거리를 구해보자.먼저 1번 노드에서 시작한다. 현재 노드를 1번 노드로 설정해 주고 visited 처리를 해준 후, 1번 노드에서 1번 노드까지의 거리는 0이기 때문에 거리를 0으로 설정해 준다. 그 다음은 현재 ..