일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 큰 수 출력하기
- 뒤집은 소수
- 연속부분수열
- GitHub #Commit #BaekJoon
- 배열
- 자바
- 임시반장 정하기
- 두 배열 합치기
- java
- 모든행과열대각선의합
- 누적 계산
- 10991
- 공통원소 구하기
- 가장 짧은 문자거리
- 코테준비
- 점수계산
- 투 포인터
- 알고리즘
- 격자판
- 백준
- 등수구하기
- ArrayList
- 보이는 학생
- 인프런
- 아스키코드
- 10992
- Pointer
- array
- Two Pointer
- 최대 길이
- Today
- Total
목록전체 글 (154)
ezhoon
Queue이란 Queue는 자료구조의 스택과 반대의 구조입니다. FIFO(First in First Out) 선입선출의 형태를 가지는 것을 Queue입니다. 특징 그래프의 넓이 우선 탐색(BFS)에 사용 front 부분은 삭제 연산만 수행한다. rear 부분은 삽입 연산만 수행한다. 컴퓨터 버퍼에서 주로 사용하며, Queue를 만들어 대기시킨 후 먼저 들어온 입력부터 처리한다. 사용법 선언구문 import java.util.Queue; 스택은 클래스로 구현하여 제공하지만, 큐는 인터페이스만 있고 별도의 클래스가 없다. 그러므로 큐 인터페이스를 구현한 클래스들을 사용해야 합니다. Stack과 항상 따라오는 개념이지만 구조가 다르다. Stack은 이전에 List 인터페이스에 포함되며, ArrayList를 상..
Stack이란 구조 중 하나인 Stack은 말 그대로 쌓다 라는 의미를 갖고 있는 자료 구조입니다. Stack의 가장 큰 특징은 LIFO(Last In First Out) 나중에 들어간 것이 먼저 나온다는 것입니다. 특징 정리 먼저 들어간 자료가 나중에 나온다 LIFO 구조 재귀적 함수를 호출 할 때 주로 사용 그래프의 깊이 우선 탐색(DFS)에서 사용 Stack 사용법 Stack 선언 구문 import java.util.Stack; Stack 값 추가 push("값") 메서드를 사용해서 Stack에 원하는 값을 추가합니다. public static void main(String[] args) { Stack intStack = new Stack(); // int형 Stack Stack stringStac..
📖 문제 첫 줄에 괄호로만 이루어진 문자열 입력 괄호가 입력되면 올바른 괄호면 "YES" 올바르지 않으면 "NO"를 출력 ⚠️ 주의사항 Stack 사용해서 풀어보겠습니다. 여는 괄호가 많은 경우 닫는 괄호가 많은 경우 두 가지 다 생각해야 합니다. ✍️ 이해 /** * 1. 첫 줄에 괄호 문자열 입력 * 2. "(" 일 경우 push ")" 일 경우 pop * 2.1 ")" 인데 stack이 empty일 경우 answer = NO, break; * 3. "(" 즉 여는 괄호가 많은 경우도 체크 해야 함 * 4. return answer */ 위 그림처럼 "(()(()))(()" 입력된 경우 stack에 쌓이고 빠지는 과정입니다. ✏️ 풀이 import java.io.BufferedReader; impor..
📖 문제 첫 줄에 자연수 N(카드 수) K(몇 번째로 큰 수 찾을지) 입력 두 번째 줄 N개의 카드 값 입력 N개의 카드 중 3장을 뽑을 수 있는 모든 경우의 수의 합을 기록 기록한 값 중 K 번째로 큰 수를 출력하시오 ⚠️ 주의사항 N개의 3장을 뽑을 수 있는 모든 경우의 수 이므로 다중 for문을 사용해야 합니다. 기록한 값 중의 K번째로 큰 수 이므로 저장할 때 TreeSet으로 저장하면 편합니다 ✍️ 이해 /** * 1. N장의 카드 K(몇 번째로 큰 것?) arr[N] 카드에 적힌 수 * 2. TreeSet ts 생성 * 3. 3중 for문으로 3개 뽑을 모든 경우의 수 ts.add * 4. ts에 있는 값들 for each 이용해서 비교하기 * 4-1. cnt 값이 k 되면 answer = i..
📖 문제 첫 줄에 문자열 S 입력 두 번째 줄 문자열 T 입력 S문자열에서 T문자열과 아나그램이 되는 S의 부분 문자열의 개수를 출력하시오 출력이 위와 같다면 S의 부분문자열은 아래와 같습니다. bac acb cba ⚠️ 주의사항 아나그램 판별이니 대소문자를 구분해야합니다. S와 T의 문자열 안의 값들을 하나하나 다시 구분하게 되면 시간 초과 오류가 생깁니다. Sliding Window로 해결해보겠습니다. ✍️ 이해 * 1. S문자열 K문자열 -> S문자열에서 T문자열 찾기(순서 상관x) * 2. 문자열 서로 칸에 맞게 비교 후 Sliding window 기준으로 왼쪽1칸 오른쪽1칸 이동 하는 방법으로 풀기 * 2-1. K의 HashMap 생성(기준이 되는 Map) (hm) + S의 HashMap 생성 ..
📖 문제 첫 줄에 N과 K 입력 두 번째 줄에 N개의 숫자열이 주어진다. N일 동안의 매출 기록을 주고 연속된 K열 동안의 매출액의 종류를 각 구간별로 구하시오. N이 7이고 7일간의 매출 기록이 아래와 같으며, K는 4이면 아래와 같다. ⚠️ 주의사항 Sliding Window 방식과 HashMap을 같이 이용하면 될 것 같습니다. 이동하면서 맨 왼쪽칸만 빼던 것과는 다르게 해야 합니다. 매출액이 7일동안 [20 12 20 10 23 17 10]이고 4일간의 매출액의 종류를 구해보겠습니다. 첫 구간 [20 12 20 10] -> 3개 두 번째 [12 20 10 23] -> 4개 세 번째 [20 10 23 17] -> 3개 위에 보이는 것처럼 맨 왼쪽꺼가 사라지는 것이 아니라 종류를 세는 것이므로 다르게..
Map 맵(Map)은 사전(dictinary)과 비슷하다고 볼 수 있습니다. people이 "사람" 뜻에 부합되듯이 Map은 Key와 Value라는 것을 한쌍으로 갖고 있습니다. Key Value people 사람 table tennis 탁구 HashMap 자바 개발자가 사용하는 Map 컬렉션 중에 가장 많이 사용되는 것을 뽑자면 HashMap이 될 것입니다. 그 이유 중 하나는 JDK 1.2부터 제공된 HashMap 클래스는 hash algorithmd을 사용하여 검색 속도가 매우 빠르기 때문입니다. Map 인터페이스를 구현하므로, 중복된 키로는 값을 저장 할 수 없지만, 같은 값을 다른 키로 저장하는 것은 가능합니다. put key와 value가 String 형태인 HashMap 생성 후 값을 입력 ..
📖 문제 첫 줄과 두 번째 줄에 단어 입력 Anagram 구분 (두 문자열의 나열 순서와 상관없이 구성이 일치하면 두 문자열은 아나그램이라고 한다. 예를 들면 AbaAeCe 와 baeeACA 는 나열순서는 다르지만 구성을 살펴보면 똑같기 때문에 아나그램입니다. 아나그램 일 경우 "YES" 아닐 경우 "NO" 출력 ⚠️ 주의사항 문자열의 종류만 구분하는게 아닌 안의 알파벳과 개수가 모두 일치해야 한다. 대소문자는 구분해야 한다. ✍️ 이해 * 1. 첫 줄 단어(A) 둘째 줄 단어(B) * 2. A를 Map 입력 * 2-1. B를 Map에 getOrDefault(x, 0) == 0 이용해서 true -> answer = NO, break; * 2-2. false 경우 map에 현재 존재하는 것이므로 x값의 ..
📖 문제 첫 줄에 반 학생수 입력 두 번째 줄에 N개의 투표용지에 쓰여져 있던 각 후보의 기호 입력 어떤 기호의 후보가 학급 회장이 되었는지 출력하는 프로그램 만들기 ⚠️ 주의사항 HashMap의 getOrDefault 사용해서 put 해야 할 것 ✍️ 이해 /** * 1. 학생수(N), 알파벳(N개) 입력 * 2. for each로 map.put 하기 * 2.1 map.getOrDefault("odject", "default value") x값이 존재하면 존재하는 값의 + 1 없으면 x값 map에 추가 후 + 1 * 3. max값 지정 * 4. for each 로 map keySet() -> map 있는 모든 object 대입 * 4-1. if 현재 입력 된 map.get(object) > max 비교..
📖 문제 첫 번째 줄에 수열의 길이인 자연수 N 과 k입력 두 번째 줄에는 N길이의 0과 1로 구성된 수열 입력 최대 k번 0을 1로 변경할 수 있다. 1로만 구성된 최대 길이의 연속부분수열의 길이를 출력 ⚠️ 주의사항 Two Pointer사용 0부터 ~ N-1 까지 이므로 길이 구할 때 조심해야함 ✍️ 이해 * 1. 길이가 N인 수열, k 번의 변경 횟수 * 2. 길이가 N인 윈도우 생성 * 3. 0을 만날때마다 1로 바꿔줬다고 가정하고 cnt++ * 3-1. rt가 N까지 반복 * 3-1-1. rt == 0 -> cnt ++ * 3-2. cnt > k 인 경우 반복 * 3-2-1. lt == 0 -> cnt --, lt++ * 3-3 answer = Math.max(answer, rt -lt + 1)..