CodingTest 16

[Java] Deque

🔍 Deque - 스택과 큐를 모두 활용하기코딩 테스트에서 스택(Stack) 과 큐(Queue) 자료구조는 필수적으로 사용됨자바에서는 Stack과 Queue가 각각 존재하지만, Deque(Double-Ended Queue)를 사용하면 스택처럼 사용할 수도, 큐처럼 사용할 수도 있으며 성능까지 우수함 📃 DequeDeque(Double-Ended Queue, 데크)는 양쪽(앞/뒤)에서 요소를 추가하고 제거할 수 있는 자료구조 Queue의 확장 형태 스택과 큐의 기능을 모두 제공 ArrayDeque, LinkedList 클래스로 구현 가능 🛠️ Deque 사용법1️⃣ 요소 추가메서드설명실패 시addFirst(E e)앞에 추가IllegalStateExceptionofferFirst(E e)앞에 ..

[Java] 딕셔너리, Map

🔍 Java의 딕셔너리, Map📃 Map의 정의Map은 키-값 쌍(Key-Value Pair)으로 데이터를 저장하는 컬렉션키는 고유해야 하고, 값은 중복 허용HashMap, TreeMap, LinkedHashMap 등이 대표적인 Map 구현체 import java.util.HashMap;HashMap map = new HashMap();🔧 Map의 주요 기능 및 사용법키와 값 할당map.put("apple", 5); // Key: "apple", Value: 5map.put("banana", 10); // Key: "banana", Value: 10map.put("cherry", 7); // Key: "cherry", Value: 7값 가져오기 (키로 검색)System.out.pr..

[Java] StringTokenizer, String.split()

🔍 StringTokenizer✨ 결론StringTokenizer는 단순하고 빠른 문자열 분리가 필요한 경우에 효과적인 도구구분자가 명확하고 복잡하지 않을 때 BufferedReader와 함께 사용하면 코드가 간결해지고 속도도 빠름 ⚠️ 복잡한 구분자 처리나 정규식 활용이 필요하다면 String.split()이 더 적합할 수 있음!📃 StringTokenizerStringTokenizer는 Java에서 문자열을 구분자를 기준으로 분리할 때 사용하는 클래스기존의 문자열을 구분자(예: 공백, 콤마 등)를 기준으로 나누고, 나뉜 각 토큰을 반복적으로 가져올 수 있음 import java.io.*;import java.util.StringTokenizer;public class Main { publ..

[Java] 데이터 타입 변환 (형 변환)

🔍 데이터 타입 변환 (형 변환, Type Casting)형 변환은 데이터를 다른 타입으로 변경하는 작업자바에서는 기본 타입(Primitive Type)과 참조 타입(Reference Type)을 변환하는 다양한 방법이 제공됨✨ 결론자동 형 변환과 명시적 형 변환 자동 형 변환은 JVM이 안전하다고 판단되면 스스로 수행함 명시적 형 변환는 직접 형 변환을 지정해주는 것이며, 데이터 손실 가능성을 주의해야 함 기본 타입 ↔ String 변환 시, String.valueOf와 parseInt/parseDouble 등의 메서드를 활용할 것 형 변환은 유연성을 제공하지만, 적절히 사용하지 않으면 오류와 데이터 손실이 발생할 수 있으니 주의하여 사용할 것 🔄 기본 타입 간 형 변환자바의 기본 타입..

[Java] BufferedReader, Scanner

🔍 BufferedReader, Scanner✨ 결론빠른 입력 속도와 대용량 데이터 처리 => BufferedReader입력 데이터를 간편하게 파싱 => Scanner입력 속도와 파싱 편의성 중 무엇이 중요한지에 따라 선택하자.📃 BufferedReaderBuffer: 임시 저장 공간 문자 기반 입력 스트림을 효율적으로 처리하기 위한 클래스데이터를 한 번에 읽어와 버퍼에 보관 후, 버퍼에서 데이터를 읽어오는 방식 입력 스트림에서 8KB의 버퍼에 데이터를 읽어옴 이후 필요한 만큼 데이터를 버퍼에서 읽어 반환함 I/O 횟수를 줄여 성능을 향상시킴 BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));String ..

[Python] 위상 정렬(topology sort)

🔍 위상 정렬 대학교 전공 시간에 교수님이 전공 선수과목 구조를 예로 들어주셨던 것이 어렴풋이 기억난다.. 핵심 이론과 구현 방법을 간단히 정리해 보려 한다. Do it! 알고리즘 코딩테스트 도서를 참고하였다. 📃 개념 사이클이 없는 방향 그래프에서 노드 순서를 찾는 알고리즘 항상 유일한 값으로 정렬되지는 않음! 진입 차수 = 자기 자신을 가리키는 에지의 개수 진입 차수 리스트를 업데이트한다. 진입 차수 리스트 중 진입 차수가 0인 노드를 선택하여 정렬 리스트에 저장한다. 선택된 노드가 가리키는 노드들의 진입 차수를 1씩 뺀다. 모든 노드가 정렬될 때까지 2 ~ 3 과정을 반복한다. 항상 유일한 값으로 정렬되지 않는 이유 => 2번 과정에서 진입 차수가 0인 노드가 여러 개 존재할 수 있기 때문에 🐍 코..

[Python] 유니온 파인드(Union-Find)

🔍 유니온 파인드(Union-Find) 해당 알고리즘이 있는 것은 알았는데 어떤 식으로 구현해서 사용하는지는 모르고 있었다. 유니온 파인드와 관련된 코테 문제들을 풀게 되었고, 이참에 유니온 파인드 알고리즘에 대해 아주 간략하게만 정리해보려 한다. Do it! 알고리즘 코딩테스트 도서를 참고하였다. 📃 개념 여러 노드가 있을 때 특정 2개의 노드를 연결해 1개의 집합으로 묶는 union 연산 두 노드가 같은 집합에 속해 있는지 확인하는 find 연산 1차원 리스트를 사용한다. 처음엔 아무것도 연결되어 있지 않은 상태이므로 각 노드가 모두 대표 노드이다. 따라서, 자신의 인덱스값으로 초기화 해준다. parent = [0 for _ in range(n + 1)] for i in range(n + 1): pa..

[Python] 위치(인덱스) 찾기 (find(), index())

백준 1167 트리의 지름 특정 원소가 리스트의 몇 번째 인덱스에서 등장하는지 찾아야 했다. indexOf()가 안되길래 검색해보니 indexOf()는 자바스크립트 문법이었다.. 이참에 잘 정리해두자. 위치(인덱스) 찾는 함수 2가지 find() a = 'abcdab' print(a.find('a')) # 0 print(a.find('c')) # 2 print(a.find('bcd')) # 1 => 문자열의 위치를 찾을 수도 있음 print(a.find('a', 2)) # 4 => 시작점만 지정한 경우 print(a.find('a', 2, 5)) # 4 => 시작점과 끝점을 지정한 경우 print(a.find('..