Programming Language/Java

Selection Sort, 선택 정렬 선택된 값과 나머지 데이터를 비교하여 알맞은 자리를 찾는 알고리즘 첫 번째 값을 선택하고 두 번째 값부터 순회하면서 제일 작은 값을 첫 번째 값과 바꿈 두 번째 값을 선택하고 세 번째 값부터 순회하면서 제일 작은 값을 두 번째 값과 바꿈 … 반복 시간 복잡도: O(n^2) Bubble Sort, 버블 정렬 배열을 계~속 순회하면서 앞뒤 원소가 오름차순이 아니면 둘이 바꿈 Insertion Sort, 삽입 정렬 데이터 집합을 순회하면서 정렬이 필요한 요소를 뽑아 적당한 곳으로 삽입 시간 복잡도: O(n^2) Quick Sort, 퀵 정렬 분할 정복 임의의 기준 값(pivot)을 정하고 해당 피벗을 기준으로 두 개의 부분 집합으로 나눔 왼쪽에는 피벗보다 작은 값들만, ..
시간 때문에 많이 고생한 문제 -.- for문의 범위에 관해서도 많이 고민했다. 아이디어 1. 원소 값과 인덱스가 일치하는 배열을 만들기 위해 n+1 사이즈 배열에 각 값을 넣는다. 2. 2부터 루트 n까지의 범위를 가지는 1차 for을 돌린다. 이것은 배열에서 2의 배수, 3의 배수, ..., i의 배수를 지우기 위해 돌리는 for문이다. 이때 기호로 i를 사용하며, 이것을 배열의 인덱스 번호로 생각한다. (*에라토스테네스의 체는 소수의 배수를 지우는 방식으로 동작한다. 예시로 어떤 수가 i*j(i
집합(HashSet)을 사용하면 금방 풀리는 쉬운 문제 되게 간단하지만 테스트 케이스가 딱 하나라 왜 틀린 건지를 몰라 헤맸다 챗지피티한테도 물어봤지만 멍청지피티는 기대에 부응하는 법이 없다 결국 백준 커뮤니티에서 찾아봤는데 좋은 테스트 케이스가 있었다 1 5 a a a a a a 기댓값: 5 실제 출력값: 1 아마 문제에서의 테스트 케이스는 잘 통과했음에도 틀렸습니다가 뜬다면 이 케이스도 1이 출력될 것이다 비교해야 하는 세트와 비교당하는 세트 총 두 개의 세트를 만들어서 교집합을 구하려고 하면 똑같은 요소가 여러 개일 경우 당연히 중복이 제거되기 때문 그러므로 하나의 세트만 만들어서 문자열과 바로 비교해 주는 것이 좋다 다음은 정답 코드 import java.io.*; import java.util...
구현 자체는 간단했지만 소수 계산이나 문자열 비교 때문에 번거로웠던 문제 앞서 말한 소수 계산, 문자열 비교를 용이하게 하기 위해 BigDecimal이라는 새로운 클래스를 도입하는 것이 필요했다 BigDecimal은 자바에서 정밀한 소수점 계산을 할 때 사용하는 클래스로, 나는 equals 외에도 add, subtract, multiply, divide 메서드를 사용했다 메서드 a.equals("string"): a와 string이 같은지 비교 a.add(b): a에 b를 더함 a.subtract(b): a에서 b를 뺌 a.multiply(b): a와 b를 곱함 a.divide(b, 6, BigDecimal.ROUND_HALF_UP): a를 b로 나눔, 이때 나누어떨어지지 않는 연산의 경우 소수점 몇 자..
코드는 완벽한데 왜 오류가 나는지 거의 한 시간 고민했다 -.- 오류 코드 int n = Integer.parseInt(st.nextToken()); int m = Integer.parseInt(st.nextToken()); int[] arr = new int[n+1]; int[] copy = new int[n+1]; for (int i=0; i
배열을 이용해서 간단하게 풀이할 수 있는 문제인데, 공을 넣지 않은 바구니의 경우 0값을 출력해야 한다. 이때, 나는 Integer[] array = new Integer...로 배열을 만들어서 풀었다. 그래서 나는 출력 단계에서 배열의 값이 null인지를 검사하고 null일 경우 0을 출력하는 코드를 따로 작성해야 했는데, 다른 사람의 코드를 보니 그 과정이 없어서 챗지피티에게 물어보았다. 결론: int는 배열을 0으로 초기화하고 Integer는 null로 초기화한다.
A를 10, ..., Z를 35로 바꾸는 것은 유니코드 변환이다. 예제에서, 36진법의 ZZZZZ를 10진법으로 계산하려면 마찬가지로 오른쪽부터 Z*(36^0) + Z*(36^1) + Z*(36^2) + Z*(36^3) + Z*(36^4) Z는 유니코드 변환을 해서 적용시키면 35인데 이해를 돕고자 Z로 표기했다. 계산해 보면 60,466,175가 나온다. 즉, n진법을 10진법으로 변환하려면 n진법으로 표기된 수의 m의 자릿수 * (n^m)를 다 더하면 된다. + 진법 계산에 대한 이해를 도울 예제 이진법 101을 계산하는 것을 예시로 들어 보면, 101(이진법으로 표기된 수)에서 오른쪽부터 0번째 자리의 숫자: 1 (n=2, m=0) 1*(2^0) 오른쪽부터 1번째 자리 숫자: 0 (n=2, m=1)..
처음에 이렇게 코드를 짰는데import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String S = sc.nextLine(); String[] stringArray = S.split(" "); List stringList = Arrays.asList(stringArray); stringList.remove(" "); System.out.println(stringList); } }입력 love // 앞에 공백 있음출력[, love] 공백이 삭제가 안 되고 계속 출력돼서... 계속 찾아봤다. asList는 불변 리스트를 return해서 그 자체로는 원소..
특징 및 구조 2-1. 객체 지향 언어 프로그래밍(OOP, Object Oriented Programming) 절차 지향 언어와 다르게 하나의 기능을 객체 형태로 만듦, 객체들을 결합하여 하나의 프로그램을 완성함. 2-2. 인터프리터 언어 컴파일 언어인 동시에 인터프리터 언어 텍스트 소스를 컴파일하여 클래스 파일로 만든 후 자바 런타임이 클래스 파일을 인터프리트하며 실행됨. 2-3. 독립적인 플랫폼 모든 OS에서 독립적으로 자바 사용 가능(JVM에서 실행되므로) *JVM(Java Virtual Machine): 자바 프로그램 실행 환경을 만들어 주는 소프트웨어 2-4. 자동 메모리 관리 개발자가 직접 메모리에 접근 X, 자바에서 직접 관리(C에서는 개발자가 직접 코드를 작성해야 함) 객체 생성 시 자동으..
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); sc.nextLine(); List stringList = new ArrayList(); for (int i=0; i
ecc1
'Programming Language/Java' 카테고리의 글 목록