백준 185

[백준, 자바, 15649번] 구간 합 구하기 4

풀이해당 문제는 누적 값 문제이어도 단순히 주어진 범위의 값을 더하면 되는 거 아님? 하고 접근했는데 시간초과나서 확인해보니까 최악이면 100억번 연산을 해야해서 마사카... 어쩌지 하고 생각해보니그냥 배열의 값을 저장할 때 이전값에 더한 값을 넣고아래와 같이 e 인덱스에 해당하는 배열 값에 s-1 인덱스 값을 빼주면 단순히 해결할 수 있는 문제였음.또한 출력이 많아질 수 도 있기에 bw로 write와 flush로 출력 import java.io.*;import java.util.*;public class _11659 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedR..

알고리즘 2024.09.06

[백준, 자바, 1926번] 그림

풀이해당 문제는 bfs 문제로 간단하게 해결했으며확실히 아래 두 방법 중 더 효율적인 건 StringTokenizer 인 걸 느껴서 입력 값이 많으면 많을 수록 이것만 사용할 듯?Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();new StringTokenizer(br.readLine());다른 건 뭐 어렵지 않게 기존 알고있는 개념이라 생략  import java.io.*;import java.util.*;public class _1926 { static int[][] mtx; static boolean[][] visit; static Deque> queue = new ArrayDeque(); ..

알고리즘 2024.09.06

[백준, 자바, 2606번] 바이러스

풀이따로 어려운 부분은 없고 단순하게 bfs로 해결 가능한 문제여기서 다시 기억해둘 것으로 2가지는IntStream.rangeClosed() 에는 map이 아닌 mapToObj인 것Collections로 생성한 배열에 초기 값을 넣어줄 땐 () 안에 Arrays.asList로 추가 가능하다는 것. import java.io.*;import java.util.*;import java.util.stream.*;public class _2606 { static List> nodes; static boolean[] visit; public static void main(String[] args) throws IOException { BufferedReader br = new Buff..

알고리즘 2024.09.06

[백준, 자바, 1072번] 게임 (이분 탐색)

풀이해당 문제를 푼 이유는 그냥 이분 탐색 문제여서 풀었으며특징적인 것을 확인했다.확인한 것으로는 무조건 작거나 같은 것을 묶기보단 가변적으로 생각 회로를 열어두는 것이좋을 것 같다는 생각을 했으며, 수학적인 점으로는 분자와 분모가 같은 값으로 더해질 경우 그에 대한 결과 값을 계속해서 커진다는 것. import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int[] li = Arrays.stre..

알고리즘 2024.08.27

[백준, 자바, 10988번] 팰린드롬인지 확인하기

풀이해당 문제를 푼 이유는정수로 들어온 값을 문자로 변형 후 배열로 만드는 방법에 대해 궁금해서 푼 문제로해결 방법은 아래와 같이 해결할 수 있고 해당 문제는 그 다음의 코드로 해결# 정수를 문자 배열로 변형char[] li = Integer.toString(100).toCharArray(); # 해당 문제 해결 코드import java.io.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); char[] li = br.readLine().toChar..

알고리즘 2024.08.27

[백준, 자바, 2512번] 예산(이분 탐색)

풀이진짜 단순한 이분 탐색 문제로각 지방 예산 요청을 정렬 후 이분 탐색 하여 해결 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); int[] li = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray(); ..

알고리즘 2024.08.24

[백준, 자바, 2110번] 공유기 설치(이분 탐색)

풀이뭔가 문제를 제대로 이해하지 못했어서 시간이 좀 더 걸린 문제로문제 해결 방법은 정말 단순하게 이분 탐색 문제인데왠지 모르게 지난 풀이 방법으론 해결 방법에 대한 뎁스가 한 개 더 있는 듯한 느낌이었어서더 꼬이게 되어버림...그리고 이분 탐색의 결과 도출에 대한 것으로 하나 상기된 것은결과가 나왔을 경우 계속해서 탐색할 때같을 경우와 부족할 경우를 함께 묶어 처리를 하는 것을 다시 상기하게 되었음. import java.io.*;import java.util.*;public class _2110 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new I..

알고리즘 2024.08.24

[백준, 자바, 10989번] 수 정렬하기 3 - 도수 정렬(Counting Sort)

풀이뭔가 간단하게 사용하는 sort() 메서드들로는 메모리 초과가 발생하기에 찾아보니도수 정렬이라는 걸 활용해야한다고 했다.그래서 다른 포스팅된 게시글을 확인했을땐 뭔가 어렵게 느껴져서GPT하고 이야기해보니 정말 간단하게해당 값에 대한 인덱스의 값을 카운팅하는 것으로요소간 비교가 아니기에 모든 데이터를 한 번씩만 접근해서범위 조건이 있는 경우 한정하에 굉장히 빠르게 처리가 가능하다는 걸 알 수 있었다.그래서 아래와 같이 코드를 작성하여 해결물론 기존 도수 정렬 방식과는 다르게 원래 방식은 입력 값에 대한 최댓값 - 최솟값 + 1에 해당하는 만큼 배열을 만들어야 했지만값을 받아오는 대로 넣어 처리하고자 하여 최댓값인 10.000에서 0번째 인덱스를 생각하여10.001만큼 크기를 정하고 이후 입력 값에 해당..

알고리즘 2024.08.03

[백준, 파이썬, 2890번] 카약

풀이문제를 해결하면서 좀 비효율적인데 이게 맞는것 같아서 그냥 적용해서 해결우선 입력 값이 많이 있기에 import sys로 input 을 재정의 하고이후 현재 카약의 위치를 찾아서 해당 카약 번호에 맞는 li의 인덱스에 넣어주기이후 결과인 result 배열에 2중 for문으로비교 대상 카약인 i와 비교할 대상 카약인 j를 비교하는데 i와 j 즉 같은 카약이 아니며 비교할 대상 카약이 더 목표 지점에 가깝고 같은 거리 위치의 카약과 비교한 적이 없는 경우에만카운팅과 s에 넣어 연산하여 해결  import sysinput = sys.stdin.readliner,c = map(int,input().split())li = [0]*(9)for _ in range(r): kayak = input().stri..

알고리즘 2024.05.28

[백준, 파이썬, 2485번] 가로수

풀이주석에 작성한 것처럼 li에는 가로수 위치result에는 가로수 사이의 거리 차이를 넣어주기이후 최대공약수(GCD)를 찾아 해결하는 것을 생각해서처음엔 result를 정렬 후 가장 작은 값과 큰 값의 GCD만을 찾아 적용해봤는데에러가 발생해서 뭔가 설마 모든 경우에 대한 GCD를 찾아야 하는지 고민 후 적용해보니 정답이 나왔다. 처음엔 왜 가장 작은 값과 큰 값의 GCD만 적용하려 했냐면어쨋든 가장 작은 값과 큰 값의 GCD로면 해결이 될 거라고 생각했기에 적용했고, 아직도 반례를 찾지 못해잘은 모르지만 적당히 해결은 했지만... 조금 찝찝하긴하다. import sysinput = sys.stdin.readlinen = int(input())li = [int(input()) for _ in range..

알고리즘 2024.05.27