알고리즘/백준 24

[백준 9461] 파도반 수열

틀린 이유는 자료형 때문이었다.dp 배열을 Long으로 변경하니까 해결되었다. int 범위는 약 -2,147,483,648 ~ 2,147,483,647 이다.dp[i] = dp[i - 2] + dp[i - 3] 계산 과정에서 100번째 값까지 계산하면피보나치와 비슷한 증가 속도 때문에 int 범위를 초과한다. dp[100] = 18,446,744,073,709,551,615 (약 18경) 코드import java.io.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in..

알고리즘/백준 2024.11.29

[백준 2579] 계단 오르기

ArrayIndexOutOfBounds가 보이시나요N보다 큰 인덱스에 접근하면 런타임 에러가 발생함따라서 N이 작은 경우에 대해 별도에 처리가 필요  코드import java.util.*;import java.io.*;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[] stairs = new int[N+1]; for(int ..

알고리즘/백준 2024.11.29

[백준 1620] 나는야 포켓몬 마스터 이다솜(Java)

나는야 포켓몬 마스터 이채림 🚨 문제 상황 1Java에서 HashMap은 키-값 쌍으로 데이터를 저장하는 자료구조로주로 키를 사용해 값을 검색하는데 최적화되어 있다. 위에 코드를 보면 값으로 키를 검색해야 하는 상황이 생긴 것을 확인핑. 🍧 해결법 1entrySet() 사용을 사용하면 된다. 🍉 코드 1import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st..

알고리즘/백준 2024.11.14

[백준 1764번] ConcurrentModificationException >> retainAll()

ConcurrentModificationExceptionHashSet이나 HashMap 같은 컬렉션에서반복문을 돌리는 동안 해당 컬렉션을 수정할 때 발생한다.  컬렉션을 수정하기 보다는 두 집합의 교집합을 찾는 것이 더 효율적이다.retainAll 메서드를 사용해서 교집합을 찾으면 된다. 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)); StringTokenizer st = new Stri..

알고리즘/백준 2024.11.07

HashSet

Java의 HashSet은 중복 없는 데이터를 저장할 때 유용한 자료구조이다. HashSet이란?HashSet은 집합(Set) 자료구조의 한 종류로, Java Collection Framework에 속한다.데이터 중복 허용 안함저장 순서 유지 안됨빠른 조회, 추가, 삭제 |  평균적으로 O(1) 사용법add() : 요소 추가remove() : 요소 제거contains() : 요소 존재 확인isEmpty() : 비어있는지 확인size() : 현재 요소 개수 반환clear() : 모든 요소 제거  HashSet과 HashMap의 차이점1. 데이터 저장 방식HashSet : 단일 값 저장HashMap : 키-값 쌍 저장 (키는 중복 허용 X, 값은 중복 가능)2. 사용 목적HashSet : 중복 없는 데이터의..

알고리즘/백준 2024.11.07

[백준 1003번] 피보나치 함수(Java)

👩🏻‍💻  오늘은 오답노트를 적어볼까 한다 틀린 코드가 창피하지만...! 이제 안틀리지 말자는 의미로 공개핑 문제https://www.acmicpc.net/problem/1003 한 마디로 피보나치 수열을 계산하면서 0과 1의 호출 횟수를 출력하는 문제이다.❌❌❌       틀린 코드 이 코드의 의도는 피보나치 수열 계산을 통해 0과 1의 호출 횟수를 누적하는 것이었다.하지만 이 방식은 잘못된 호출 횟수를 반환한다.➡️ 의도대로 동작하게 하려면 재귀 호출 패턴을 추적하는 방식이 필요하지만 어렵다.실제 호출 횟수는 피보나치 수열에서 각 항이 다른 항들을 호출하는 횟수에 따라 달라진다.🍀개선해야 할 점피보나치 수열에서 각 항이 다른 항들을 호출하는 횟수를 추적하려면각 수가 호출되는 횟수를 따로 추적하..

알고리즘/백준 2024.11.07

Dynamic Programming(DP)

🔽 저번 포스팅더보기동적 계획법(dynamic programming)복잡한 문제를 여러 개의 간단한 문제로 분리하여부분의 문제들을 해결함으로써 최종적으로 복잡한 문제의 답을 구하는 방법  🌈 동적 계획법의 원리와 구현 방식큰 문제를 작은 문제로 나눌 수 있어야 한다.작은 문제들이 반복돼 나타나고 사용되며 이 작은 문제들의 결과값은 항상 같아야 한다.모든 작은 문제들은 한 번만 계산해 DP 테이블에 저장하며 추후 재사용할 때는 DP 테이블을 이용한다. 이를 메모이제이션 기법이라고 한다.동적 계획법은 top-down 방식과 bottom-up 방식으로 구현할 수 있다.* 메모이제이션부분 문제를 풀었을 때 이 문제를 DP 테이블에 저장해 놓고다음에 같은 문제가 나왔을 때 재계산하지 않고DP 테이블의 값을 이..

알고리즘/백준 2024.11.06

조합

조합(Combination)nCr로 표현하고, 이는 n개의 숫자에서 r개를 뽑는 경우의 수를 뜻한다.조합과 비교되는 순열은 nPr로 표현되고, n개의 숫자 중 r개를 뽑는 순서를 고려한다.순열과 조합의 차이는 순서의 고려 유무이다.    알고리즘에서 조합을 구현할 때는 수학 공식을 코드화하지 않고점화식을 사용해 표현한다. 만약5개의 데이터에서 3개를 선택하는 조합의 경우의 수를 푸는 문제가 있다. 1. 먼저 5개의 데이터 중 4개를 이미 선택이 완료된 데이터라고 가정한다.2. 마지막 데이터의 선택 여부에 따른 경우의 수를 계산한다.선택이 완료된 데이터 중 2개를 선택하는 경우의 수 4C2선택이 완료된 데이터 중 3개를 선택하는 경우의 수 4C35C3 = 4C2 + 4C3  5개 중 3개를 선택하는 경우의..

알고리즘/백준 2024.11.06

/ by zero 오류

입력 부분을 보면 n(입력 값)이 0이 될 수도 있다.입력 값이 0일 경우 절사 평균을 계산할 수 없기 때문에별도로 예외처리를 해줘야 한다. 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()); if (N == 0) { // 입력이 0일 경우 예외 처리 System.out.println(0..

알고리즘/백준 2024.11.03