전체 글 90

[백준알고리즘] 이분탐색 응용 - 숫자 카드2 문제

시간초과 코드 대략 어떤 식이었냐면 찾고자 하는 수를 먼저 이분탐색으로 인덱스를 알아내고 그 수가 여러개 있을 경우를 생각해서 그 인덱스로부터 앞으로 얼마나 더 있는지, 뒤로 얼마나 더 있는지를 선형탐색식으로 찾아나가는 방법이었으나 탐색 횟수가 커지면 아무래도 시간초과가 뜰만한 방법이었다.. package baekjoonWeek5; import java.io.*; import java.util.ArrayList; import java.util.Collections; import java.util.StringTokenizer; public class BJ_10816 { //백준 숫자카드 2 문제 static ArrayList cards; public static void main(String[] args)..

알고리즘 2023.05.13

[백준알고리즘] 이분검색 - 1920번 수 찾기 문제

이분검색 복습할겸 풀어본 문제 풀이코드 package baekjoonWeek5; import java.io.*; import java.lang.reflect.Array; import java.util.Arrays; import java.util.StringTokenizer; public class BJ_1920 { static int[] nums; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System..

카테고리 없음 2023.05.12

[백준알고리즘] 정렬 - 2628번 종이자르기 문제

첫번째 제출에서 틀렸었는데, 가로로는 자르지 않거나 세로로는 자르지 않았을 경우를 생각해놓지 않아서 90퍼쯤에서 런타임에러가 떴었다. sort함수를 써서 정렬을 하긴 했는데 정렬 문제를 이렇게 풀어도 되나(?) -> ㄱㅊ 사실 풀때 첨엔 좀 막막했었다. 뭔가 쉬워보이는데 바로 쉽게 풀리진 않았던 문제.. 가로로 잘랐을때 생기는 각 높이들, 세로로 잘랐을때 생가는 각 가로길이들을 구하고 (이것들을 모두 조합하면 잘랐을때 생기는 모든 사각형들이게 되므로) 각각 내림차순으로 정렬해서 가장 앞에 있는 값을 각각 구해(가장 큰 값) 그 두개를 곱해서 답을 구했다. 풀이코드 package baekjoonWeek5; import java.io.*; import java.lang.reflect.Array; import..

알고리즘/정렬 2023.05.12

[백준알고리즘] bfs - 11725번 트리의 부모 찾기 문제

첨에는 2부터 N까지 반복문으로 bfs에 하나씩 수를 넣어 찾도록 했었는데 그러려면 하나 찾기 위해 bfs를 매번 돌려야 하므로 시간초과가 난다. bfs를 한번 수행해서 부모 노드의 값을 담을 배열에 그때그때마다 각각의 부모노드를 담고 bfs가 끝나뒤 이 배열의 값을 차례대로 출력하는 식으로 하면 시간초과가 해결된다. 풀이코드 package baekjoonWeek5; import java.io.*; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class BJ_11725 { // 백준 트리의 부모찾기 문제 static int[] vis..

알고리즘/bfs 2023.05.09

[백준알고리즘] 스택 - 2304번 창고 다각형 문제

ㅋㅋㅋㅋㅋ네번만에 성공했다^^ 스택으로 어찌저찌 풀도록 구현은 했는데 뺴먹은게 너무 많았었다. 경우의 수들을 다 생각 못했었고 마지막에는 >=, >관련해서 제대로 안해놔서 두번이나 틀렸었다 높이가 같은 경우를 다 고려 못했었음 늘 비교 연산자 주의하자..이런걸로 자주 틀리는것같다 예전에 풀어봤던(사실 코드를 짜본건 아니고 풀이법 이해하고 넘어가는정도로 그쳤지만..) 히스토그램 문제도 생각났음.. 코드가 몹시 조악하지만 일단 정리안한채로 올려본다 package baekjoonWeek5; import java.io.*; import java.util.Arrays; import java.util.Stack; import java.util.StringTokenizer; public class BJ_2304 { ..

[백준알고리즘] 1244번 스위치 켜고 끄기 문제

첫번째 제출때는 틀렸었다. 스위치 각 위치별로 상태를 저장하는 배열(onAndOff[])을 인덱스 1부터 의미있는 값이 저장되도록 했는데 girl()함수 내 조건문에서 left >= 0으로 해놨던게 문제였음.. 0번인덱스값은 살펴보면 안된다 이런 실수 그만하고싶어~~ 수정한 코드 package baekjoonWeek5; import java.io.*; import java.util.StringTokenizer; public class BJ_1244 { static int[] onAndOff; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader..

알고리즘/구현 2023.05.06

[백준알고리즘] bfs - 1463번 1로 만들기 문제

visit로 최초로 방문했는지 체크 안해줬다가 잘못된 값이 나와서 고쳤다. 이제 제대로 나오는듯 그러나 시간초과가 떴다.. -> 쓸데없는 과정들을 빼기로 했다 미리 ArrayList에다가 모든 가능한 노드들을 미리 추가해주었기 때문에 쓸데없이 시간이 오래 걸렸다. 어차피 N에서 1까지만 한번 가면 되니까 굳이 다 추가하기 보다는 큐에다가 그때그때 넣을수 있는 노드들을 추가하는 식으로 변경하면 훨씬 효율적이다 visit체크도 새 노드를 큐에 넣을때 확인해주도록 하자 시간초과 코드 package BFS; import java.io.*; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; public class BJ_..

알고리즘/bfs 2023.05.06

[백준알고리즘] dp - 1463번 1로 만들기 문제

https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net dp가 또 가물가물해진것 같아서 연습겸 풀어봤는데 이걸 어케 dp로 하지..dp풀이법이 너무 생각이 안났다 dp는 뭐랄까 대강 어떤식인지는 알아도 문제별로 적용하려면 잘 생각이 안난다.. 막상 풀이법을 공부하고 와서 다시 보면 왜 진작 이렇게 못했을까 막 아쉽고.. 다른 방식으로라도 풀어보려다가 삽질만 한 코드는 다음과 같음 틀렸습니다 코드 package DP; import java.io.*; public class BJ_1463 { public static void main(String[] args) thro..

알고리즘/dp 2023.05.05

[SWEA] Test샘플문제 - 1952번 수영장 문제 (dp풀이)

dp로도 풀어봤다 사실 dp로 처음에 어케 푼다는거지..?바로 감이 오진 않았다 손으로 하나하나 풀어보면서 겨우 감을 잡고 코드를 짰다.. 눈물.. 나는 먼저 일일권 vs 한달권중 더 이득인걸 plan 배열에 각 달마다 넣었고 그다음 dp를 진행하며 3달권이 더 이득인지 아닌지를 판별하도록 했다 연간권이 더 이득인지는 마찬가지로 맨 마지막에 한번 비교하도록 했다 풀이코드 package SWTest; import java.io.*; import java.util.StringTokenizer; public class SW_1952_DP { //dp로 다시 풀이해보기 public static void main(String[] args) throws IOException { BufferedReader br = ..

알고리즘/dp 2023.05.05

[SWEA] Test샘플문제 - 1952번 수영장 문제 (dfs풀이)

dfs로 코드 짜면서 수월하게 풀리겠는데..?했으나 이것저것 잘못해놔서 틀린거 고치느라 시간 많이 썼다. 아오~~~~ 별수있나..내가 아직 부족한 탓인것을.. 쓸데없는 for문도 쓰고 dfs종료조건도 잘못 썼었다. 저 이중for문 진짜..왜저랬는지.. 한 노드에서는 3가지 선택지를 한번씩만 해보면 되니까 굳이 for문으로 저래놓지 않았어도 될일이었다 특히 depth == count로 최종값을 비교하고 dfs 빠져나가는 부분 이게 한번 dfs를 수행할때마다 depth가 1씩 증가하면 괜찮겠지만, 세달치 요금을 계산하는 과정에서는 그만큼 세달을 뛰어넘어야 하기 때문에 depth가 나중에 가서 딱 12가 되는게 아니라 12 이상이 될 수 있다 그래서 값이 12 이상이 되면 살펴보도록 조건문 부분을 나중에 바꿨..