자바 54

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

[개발 지식, 자바] 아스키 코드

아스키 코드 -> 문자문자 -> 아스키 코드 변환 방법에 대해선 파이썬 아스키 코드 -> 문자 => chr()문자 -> 아스키 코드 => ord()자바에선 어떻게 하는지 확인해보니형변환만 하면 되는 간단한 방법으로 아래와 같다아스키 코드 -> 문자 =>  (int)public class AsciiExample { public static void main(String[] args) { char ch = 'A'; int ascii = (int) ch; System.out.println("The ASCII value of " + ch + " is: " + ascii); }}문자 -> 아스키 코드 => (char)public class AsciiExample {..

개발 지식 2024.08.02

[개발 지식, 자바] List vs ArrayList vs LinkedList

자바는 따로 교육을 받은 경험이 없어 기초적인 내용 또한 잘 다져놔야 이후 내용을 잘 습득할 것으로 생각하여 포스팅 자바에서 List, ArrayList, 그리고 LinkedList는 자주 사용되는 컬렉션 클래스들로, 각각의 사용 목적과 특징이 다르다. 이들 중 어떤 것을 선택해야 하는지는 주로 사용 시나리오와 성능 요구 사항에 따라 달라짐. 아래는 각 컬렉션 클래스의 주요 특징과 사용 사례애 대한 설명. 1. ListList는 인터페이스로, ArrayList, LinkedList 등 다양한 리스트 구현체들이 이를 구현합니다.List 자체는 객체를 저장하는 순서가 중요할 때 사용됩니다. 일반적으로 List를 타입으로 사용하고, 실제 구현체는 ArrayList나 LinkedList를 사용합니다.List l..

개발 지식 2024.08.01

[개발 지식, 자바] 포맷 문자열 - format

자바의 String.format 메서드는 포맷 문자열을 사용하여 문자열을 생성하는 데 사용. 이 메서드는 C 언어의 printf와 유사한 형식을 따르며, 여러 가지 데이터 타입을 포맷팅하여 문자열로 변환할 수 있음. String.format 메서드는 정적 메서드이므로, String 클래스의 인스턴스를 생성하지 않고도 사용할 수 있음.기본 사용법String formattedString = String.format(String format, Object... args);format: 포맷 문자열로, 문자열 내에 포맷 지정자(예: %s, %d, %f 등)를 포함할 수 있습니다.args: 포맷 지정자에 대응하는 값들입니다. 여러 개의 값을 전달할 수 있습니다.주요 포맷 지정자%s: 문자열(String)%d: 1..

개발 지식 2024.07.31

[프로그래머스, 자바] 약수의 합

풀이 간단한 문제이지만 알지 못했던 자바 메서드를 사용했기에 정리하려 포스팅. 파이썬에서는 int(x**(1/2))와 같이 작성하면 되는걸 자바에서는 어떻게 작성해야하나 싶었는데 우선 Math.sqrt(x)를 넣어주게 되면 되고 이걸 Math.floor() 에 넣어줘서 소수 부분을 버리기. 이후 (int)로 정수화 시켜 해결. 그리고 만약 (1/2)가 아닌 가변의 값이라면 어떻게 해야하는지 궁금해서 찾아보니 Math.pow()로 첫 번째 인자로 x를 넣고, 두 번째 인자로 원하는 값을 넣는 건데 이때 모든 인자의 값은 정수가 아닌 실수로 넣어줘야 한다는 것을 주의하기 해결 코드 아래에 Math.pow()적용 법에 대한 코드 또한 함께 첨부. class Solution { public int solutio..

알고리즘 2024.03.20

[프로그래머스, 자바] 자릿수 더하기

풀이 단순하게 10으로 나눈 나머지를 계속 더하는 방법도 있지만 자바에 대해 익숙해지기 위해 형변환을 하여 값을 추가하고자 해서 아래와 같이 해결했는데 해결 과정에서 파이썬의 range(시작, 끝)과 같은 걸 for-each로 접근하고 싶었는데 잘 되지 않아 찾아본 결과 stream을 사용하면 되어 두 번째 해결 방법처럼 하면 해결이 된다. 아 그리고 charAt()으로 문자를 가져온 다음 변형하려면 String.value()로 형변환은 한 번 더해야함. import java.util.*; public class Solution { public int solution(int n) { int result = 0; String s_n = String.valueOf(n); for (char num: s_n.t..

알고리즘 2024.03.20

[프로그래머스, 자바] 유한소수 판별하기

풀이 우선 기약분수와 소인수에 대한 정의를 한 번 하고 가자면 기약분수란? 분자와 분모의 공약수가 1로만 이루어져 있는 분수. 소인수란? 주어진 자연수를나누어 떠러뜨리는 약수 중 소수(1)인 약수이기에 해당 문제는 우선 a와 b를 기약분수로 만드는 것부터 접근을 했다. 그래서 s가 e보다 커지기 전까지 while문을 돌렸고 의미 없이 반복하기 보단 마지막을 a로 지정하고 a가 줄어들면 e 또한 함께 줄여 시간을 단축하고자 했으며 이후 분모가 2와 5로만 나누어져서 현재 상태가 1일 경우인지 아닌지에 대한 판별하여 해결. class Solution { public int solution(int a, int b) { int s = 2; int e = a; while (s

알고리즘 2024.03.20

[프로그래머스, 자바] 문자열 밀기

풀이 StringBuilder를 사용해서 문자를 추가하고 초기화하여 해결. 여기서 기존 문자간의 비교는 equals() 메서드를 사용했지만 StringBuilder와의 문자열과의 비교는 equals()로는 안되고 contentEquals()로 해야 한다는 것을 알게 되었다. 그리고 초기화는 sb.delete()로 시작과 끝 인덱스 값을 넣어주기. 그런데 이렇게 풀지 않고 그냥 A를 두배로 늘려서 B가 어디에 있는지 indexOf()로 찾는 방법도 있어서 아래 두 번째 해결 방법으로 풀 수도 있음. class Solution { public int solution(String A, String B) { int ln = A.length(); StringBuilder sb = new StringBuilder(..

알고리즘 2024.03.19