목록Algorithm (87)
Dazzling 개발 노트
[백준] 14467 - 소가 길을 건너간 이유1 (Java) 문제 https://www.acmicpc.net/problem/14467 풀이/후기 코드 package Implementation; import java.io.*; import java.util.StringTokenizer; public class Problem14467 { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); int[] arr = new int[11]; int cnt = 0..
[백준] 2729 - 이진수 덧셈 (Java) 문제 https://www.acmicpc.net/problem/2729 풀이/후기 이진수가 나올 때마다 어떻게 풀어야할지 감이 안잡힌다,, 십진수로 변환하여 풀면 쉬울 것 같은데, 이런 문제는 대부분 엄청 큰 수까지 나오기 때문에 그렇게 접근할 수는 없다,, 그리고 덧셈의 경우, 뒷자리 부터 비교를 하는데 그럼 결과가 역순이 된다. StringBuilder를 평소에 자주 사용하는 편인데 이 문제 덕분에 reverse()로 역순으로 출력이 가능한 것을 알게 되었다. 추가적으로 문제에서 요구하는 출력 조건이 까다로운데, 예외적 테스트케이스로 000 000 으로 주어졌을때 결과는 000이 아니라 0으로 출력되어야 한다. 즉 0이 문자열의 앞에서 겹쳐지는 경우를 고..
[백준] 1305 - 광고 (Java) 문제 https://www.acmicpc.net/problem/1305 풀이/후기 코드 package KMP; import java.io.*; public class Problem1305 { public static void main (String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int L = Integer.parseInt(br.readLine()); String str = br.readLine(); int lastPi = getLastPi(str); System.out.println(L - lastPi); } st..
[백준] 1212 - 8진수 2진수 (Java) 문제 https://www.acmicpc.net/problem/1212 풀이/후기 브론즈 문제이지만 디테일이 중요한 문제였다. 일단 8진수를 바로 2진수로 변경하는 방법이 떠오르지 않아 8진수 > 10진수 > 2진수 이렇게 변환하는 것을 생각했는데, 이 풀이는 오답이다. 8진수는 한 자리씩 잘라 3자리의 2진수로 변경이 가능하다. 3 = 011 1 = 001 4 = 100 314 = 011001100 수는 반드시 1로 시작해야 하므로 가장 앞의 0은 제거해야 한다. 미리 8진수로 나올 수 있는 2진수를 배열로 구성해 두고, 주어진 8진수를 한 자리씩 잘라 해당되는 배열의 값으로 대체하여 StringBuilder에 넣어준다. 완성된 StringBuilder에..
[프로그래머스] 자연수 뒤집어 배열로 만들기 (Java) 문제 https://school.programmers.co.kr/learn/courses/30/lessons/12932# 풀이/후기 쉽게 풀었는데 일부 테스트케이스에서 오답 처리가 되었다. 원인은 (int) 형변환 시에 (n%10)을 n%10로 적어서 정상적인 형변환이 이루어지지 않아서였다. 사소한 부분을 실수하니 찾는데 시간이 좀 걸렸다. 그래도 하나 또 알아간다. 코드 class Solution { public int[] solution(long n) { //n = 5000; String str = String.valueOf(n); int[] answer = new int[str.length()]; int i=0; while (n > 0){ a..
[백준] 4963 - 섬의 개수 (Java) 문제 https://www.acmicpc.net/problem/4963 풀이/후기 일반적인 그래프탐색 문제지만, 대각선으로 인접한 경우에도 한 가지로 판단하는 문제였다. 즉, 상하좌우 + 대각선까지 고려해야한다. 대각선은 현재 지점을 기준으로 {-1,-1}, {-1,1}, {1,1}, {1,-1}인 것만 생각한다면 쉽게 풀 수 있다. dir에 상하좌우 4개와 대각선 4개까지 총 8개 경우를 넣어주면 된다. 예전엔 대각선 어려울 줄 알고 겁먹었었는데, 생각해보니 굉장히 간단하게 풀 수 있었다~ 코드 package GraphTheory; import java.io.*; import java.util.*; public class Problem4963 { static..
[백준] 16956 - 늑대와 양 (Java) 문제 https://www.acmicpc.net/problem/16956 풀이/후기 스페셜 저지 문제로, 예제에 나온 출력과 내 결과가 달라도 문제의 조건이 맞다면 정답처리가 된다. 처음 예제 출력을 보고 울타리를 어떻게 효율적으로 배치하는 코드를 짜야하는지 막막했다. 그러나 울타리 개수가 한정된 것이 아니고, 효율적으로 배치하라는 조건도 없기 때문에 그저 양과 늑대가 만나지만 않는다면 울타리는 자유롭게 설치가 가능하다. 예제 3 출력을 보면 울타리가 하나 들어가 있는데, 어차피 늑대가 존재하지 않기 때문에 울타리가 없어도 정답이다. 그래서 BFS를 이용해 늑대 주변에 모두 울타리를 설치하는 방식으로 풀었다. 단, 늑대와 양이 1칸 이내에 존재한다면 무조건 ..
[백준] 14889 - 스타트와 링크 (Java) 문제 https://www.acmicpc.net/problem/14889 풀이/후기 백트래킹 유형은 그동안 외면하다가 처음 풀어본 것 같다. 처음에는 그래프탐색이나 DP를 활용한 풀이를 생각했었다. 결국 DFS를 활용한 백트래킹으로 풀었다. N명을 2개의 팀으로 나누기 위해 depth 변수를 활용한다. depth+1을 계속해서 호출하며 N명의 절반이 될 때까지 재귀를 호출한다. 즉, 이렇게해서 팀을 나눈 것이다. 팀은 두개의 팀이기 때문에 true, false로 구분이 가능하다. 나는 true팀, false팀이라고 이해하니 편했다. 그리고 팀이 결성된 후에 각 팀의 점수를 비교하여 최소값을 구해주면 된다. 처음 생각할 때는 어려운데, 소스코드를 보면 또 ..