알고리즘 305

[프로그래머스, 자바, 181923번] 수열과 구간 쿼리 2

풀이이전 문제와 마찬가지고 풀이는 간단한데다른 풀이를 보고 적용해보면 추후에 도움이 될 것 같아서 적용.여기에서 특징점은 2개의 map 사용과그에 따른 min() 후 없다면 orElse(-1)로 return 하는 것이 가장 좋았다. import java.util.stream.IntStream;class Solution { // public int[] solution(int[] arr, int[][] queries) { // int[] answer = new int[queries.length]; // int idx = 0; // for (int[] li: queries) { // int num = 1000001; // for..

알고리즘 2024.10.01

[프로그래머스, 자바, 181924번] 수열과 구간 쿼리 3

풀이문제는 정말 간단한거라서 따로 풀이는 없고다른 사람의 풀이를 보다가 Collections.swap() 메서드를 확인하게 되어 포스팅을 햄Collections 타입의 객체로 구성된 배열을 Collectinos.swap()으로첫 번째 인자로는 해당 타입의 배열,두 번째, 세 번째 인자로는 변경하고자는 값을 넣으면 변환이 됨. import java.util.List;import java.util.Arrays;import java.util.ArrayList;import java.util.Collections;import java.util.stream.Collectors;class Solution { public int[] solution(int[] arr, int[][] queries) { ..

알고리즘 2024.10.01

[백준, 자바, 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

[백준, 자바, 15649번] N과 M (1)

풀이두 가지 해결 방법은 딱 2~3줄 차이로StringBuilder로 결과를 String 타입으로 저장하는 건데나는 기존엔 첫 번째 해결 방법으로 join으로 배열을 공백없이 출력하도록 했는데이유는 계속 변수 + " " 이렇게 하면 마지막 인덱스의 값 다음에 공백이 추가되니까 문제가 될 거 같아 join으로 했는데 두 번째 방법처럼 StringBuilder에 추가 후 sb.toString() 을 해도 아무런 문제가 없어서.앞으로도 이렇게 하면 될 듯하다 ㅋㅋ // 첫 번째 해결 방법import java.io.*;import java.util.*;import java.util.stream.*;public class _15649 { static Deque result; static boolean[..

알고리즘 2024.09.05

[프로그래머스, 자바, 1260번] DFS와 BFS

풀이세상에 파이썬으로는 정말 엄청나게 간결하게 할 수 있는 코드인데자바는 역시 코드가 엄청나게 길게 작성되는 것 같다.우선 기본적인 알고리즘 해결 방법은 같다.다만 for문 작성을 줄이고 최대한 stream을 사용해서 가독성을 늘리려고 하니깐다양한 시도를 해보다가 늦게 되었는데우선 새롭게 알게 된 것들에 대해 작성하자면1. Collections.nCopies()에 두 번째 인자로 new ArrayList() 을 넣고 돌리니같은 주소값을 가지는 배열을 똑같이 추가해서 의도한 코드 구현이 안되었다.그래서 IntStream.rangeCloesd() 로 원하는 크기의 배열을 만든 다음mapToObj에서 ArrayList 객체를 lambda 형식으로 새롭게 만들고Collections 타입이기에 .collect(C..

알고리즘 2024.09.05

[프로그래머스, 자바, 84512번] 모음 사전

풀이해당 문제는 자바로 재귀 문제를 해결해보고자 푼 문제로두 가지 방법을 활용하여 해결해봄우선 첫 번째로는 기본적이며 완전탐색하는 방법으로 모든 조합을 만든 다음 같은 문장을 찾는 방법으로 해결했으며두 번째 방법은 join을 활용해서현재 추가된 배열의 값과 같은 문자열을 찾으면 멈추는 방법으로 해결두 가지 방법 모두 재귀와 백트래킹을 활용하여 해결했음다만 계속 return 사용에 대한 혼동이와서 시간이 걸렸지만이제 해결할 수 있을 것 같다.혼동이 온 이유는 파이썬에서는 return에 대한 타입을따로 정의하지 않다보니 어디부분에선 return 만 사용하고어디부분에선 return {정수타입 변수} 로 하다보니갑자기 혼동이 와서 헷갈렸었다. // 첫 번째 방법import java.util.*;class Sol..

알고리즘 2024.09.04

[프로그래머스, 자바, 12911번] 다음 큰 숫자

풀이그냥 단순하게 해결했으며, 문법적인 것으로 알게된 것은2진, 8진, 16진 변경은 아래와 같다.Integer.toBinaryString() -> 2진Integer.toOctalString() -> 8진Integer.toHexaString() -> 16진그리고 파이썬처럼 문자열 안에 특정 문자가 몇 개있는지 찾는 find()와 같은 함수가따로 없는 듯 하여 아래 코드와 같이 해결할 수 있음을 상기 시킴. class Solution { public int solution(int n) { int n_cnt = find(n); int result = 0; for (int i=n+1; i

알고리즘 2024.09.04

[SWEA, 자바, 1983번] 조교의 성적 매기기

풀이요즘 기본 알고리즘 해결을 위한 언어를 자바로 고정하기 위해SWEA로 기초를 닦으며 이런 저런 공부를 하고 있음.아래 코드는 단순하게 테스트 케이스 만큼 특정 학생의 성적을 조회하는 문제인데뭔가 자바여서 그런지 코드가 더럽긴하다.아래 코드 내용은 별 다른게 없어 해결 방법에 대한 건 생략하지만내림차순 정렬은 Collections.reverseOrder() 메서드로 할 수 있으며,기본 타입 배열을 Collection에 해당하는 배열에기본 값으로 깊은 복사를 하고자 할 땐 Arrays.asList()를 사용하기.그리고 같은 기본 타입 배열에 깊은 복사를 하고자 할 땐 아래의 코드를 사용하기.System.Arrays.copyOf() 첫 번째 인자에는 배열두 번째 인자에는 배열의 길이를 넣기Clone()  ..

알고리즘 2024.08.29