일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Two Pointer
- java
- 가장 짧은 문자거리
- 공통원소 구하기
- 백준
- 최대 길이
- 연속부분수열
- 모든행과열대각선의합
- 코테준비
- 10991
- 누적 계산
- 큰 수 출력하기
- 격자판
- 아스키코드
- ArrayList
- 점수계산
- 보이는 학생
- 배열
- 인프런
- Pointer
- 임시반장 정하기
- 투 포인터
- 뒤집은 소수
- 알고리즘
- array
- 자바
- 등수구하기
- 두 배열 합치기
- GitHub #Commit #BaekJoon
- 10992
- Today
- Total
목록자바 (24)
ezhoon

📖 문제 첫 번째 줄에 수열의 길이인 자연수 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)..

📖 문제 첫 번째 줄에 양의 정수 N가 주어진다. 2개 이상의 연속된 자연수의 합으로 정수 N을 표현하는 방법의 가짓수를 출력 N이 15이면 7 + 8 = 15 / 4 + 5 +6 = 15 / 1 + 2 + 3 + 4 + 5 = 15 총 3가지의 경우가 존재한다. ⚠️ 주의사항 two pointer 사용 예제 - [인프런] 03_04 연속 부분 수열 (Two pointers) ✍️ 이해 * 1. 정수 N 만큼의 배열 생성 15면 1 ~ 14까지의 배열 arr 생성 * 2. pointer) left, right = 0 * 3. right 값이 N - 2 될 때 까지 반복 * 3-1. sum sum += arr[++right] * 3-2. sum > N -> sum -= arr[left++] *..

📖 문제 첫째 줄 N, 특정 숫자 M이 주어진다. 둘째 줄에는 N개의 수로 이루어진 수열이 주어진다. 수열의 합이 특정숫자 M이 되는 경우가 몇 번 있는지 구하시오 N = 8, M = 6인 경우 아래와 같은 배열을 가지면 3가지 입니다. {2, 1, 3}, {1, 3, 1, 1}, {3, 1, 1, 1} ⚠️ 주의사항 Two pointers 알고리즘 풀 때 한 개의 배열일 때는 어떻게 해야 할지 수열의 마지막을 벗어나지 않게 조심하기 2022.01.21 - [인프런_자바_알고리즘_기초/Two pointers, Sliding window] - 투 포인터란? ✍️ 이해 * 1. N개의 배열 M이 되는 경우 * 2. 투 포인터 방식으로 left, right 변수 선언 * 2-1. sum = left ~ rig..

📖 문제 첫 줄에 N과 K가 주어진다. 두 번째 줄에 N개의 숫자열이 주어진다. N일 동안의 매출기록을 주고 연속된 K일 동안의 최대 매출액이 얼마인지 구하시오. ⚠️ 주의사항 for문을 다 돌려서 할 수도 있지만 슬라이딩 윈도우 방식으로 해결 해보겠습니다. ✍️ 이해 슬라이딩 윈도우 방식이란 배열의 처음부터 순차적으로 탐색하고 부분 배열을 꺼내 보는 것입니다. 이때 부분 배열의 길이는 고정적(일정)합니다. 참고 블로그 아래와 같은 배열이 주어지고 10일 동안의 매출 중에 3일 동안의 최대 매출액은 얼마인지 구할려고 해보겠습니다. 0 1 2 3 4 5 6 7 8 9 12 15 11 20 25 10 20 19 13 15 * 슬라이딩 윈도우 방식으로 해결 * 1. N개 만큼의 숫자열 입력, K입력 * 2. ..

📖 문제 A(N개)와 B(M개) 두 개의 집합이 주어지면 두 집합의 공통 원소를 추출 후 오름차순으로 출력하시오 ⚠️ 주의사항 집합 A와 B는 정렬 돼 있지 않다. pointer로 비교하기 위해서는 A와 B를 먼저 정렬 후 해결해야 한다. ✍️ 이해 * 1. N 개의 집합 A, M 개의 잡합 B 입력 * 2. Arrays.sort(A), Arrays.sort(B) * 3. pi -> A의 pointer, pj -> B의 pointer * 3-1. A[0]B[0] A[1]B[1] ~ A[N-1]B[N-1] 비교해서 같은게 있으면 answer배열에 추가 * 3-2. 중복되면 안되므로 answer에 add * 4. return answer ✏️ 풀이 import java.io.BufferedReader; im..

📖 문제 첫 번째 줄에 배열의 크기인 N 입력 두 번째 줄에 N개의 배열 원소가 오름차순으로 주어진다. 세 번째 줄에 배열의 크기인 M 입력 네 번째 줄에 M개의 배열 원소가 오름차순으로 주어진다 두 배열을 오름차순으로 합쳐 출력하는 프로그램을 작성하시오. ⚠️ 주의사항 N개의 배열 원소, M개의 배열 원소 오름차순이다. 두 배열을 합친 배열도 오름차순이다. ✍️ 이해 내가 풀 때 적었던 풀이 방법 * 1. 1차원 배열 입력 2개 받기 N개와 M개 * 2. 한개로 합쳐서 내림차순 해야 하므로 answer[N+M] 에 각각 누적시킨다 * 2-1. N은 i = 0 ~ N -> answer[i] * 2-2. M은 i = N ~ N+M -> answer[i] * 2-2-1. M의 값을 answer[i]에 넣을 ..

📖 문제 첫 줄에는 반 학생 수 N명 과 M이 주어진다. 두 번째 줄부터는 M개의 줄에 걸쳐 수학 테스트 결과가 학생 번호로 주어진다. 학생 번호가 제일 앞에서부터 1 ~ N 등 순으로 표현된다. 이때 멘토링을 하고자 하는데 멘토가 되는 학생은 멘티의 수학 등수가 모든 테스트에서 앞서야 한다. 이런 경우에 멘토링을 할 수 있는 짝이 몇 가지가 나오는지 출력하시오 ⚠️ 주의사항 A 학생이 B 학생의 멘토가 되기 위해선 모든 등수가 앞서야 하며 반대로 B가 A의 멘토가 되는 경우의 수도 생각해야한다. 본인의 경우는 어차피 등수가 똑같으므로 따로 조건부를 할 필요가 없을것이다. ✍️ 이해 * 1. 학생 수 N명 M개의 줄로 이루어진 수학테스트 결과 * 2. 멘토(선생) / 멘티(학생) * 2-1. A(멘토) ..

📖 문제 첫째 줄에는 반의 학생 수를 나타내는 정수가 주어진다. 둘째 줄부터는 1번 학생부터 차례대로 각 줄마다 1학년부터 5학년까지 몇 반에 속했었는지를 나타내는 5개의 정수가 빈칸 하나를 사이에 두고 주어진다. 반 학생 중에서 1~5학년까지 지내오면서 한 번이라도 같은 반이었던 사람이 가장 많은 학생을 임시 반장으로 지정한다. 1학년 2학년 3학년 4학년 5학년 1번 학생 2 3 1 7 3 2번 학생 4 1 9 6 8 3번 학생 5 5 2 4 4 ⚠️ 주의사항 한 번이라도 같은 반이었던 사람이 가장 많은 학생을 찾아야 한다. A랑 B가 5년 동안 같은 반이었다고 해도 1번이다. 학년은 1~5학년까지 동일하며 달라지는 것은 학생 수이다. ✍️ 이해 * 1. 반의 학생 수 입력 * 2. 둘째줄 부터 1번..

📖 문제 첫 줄에 자연수 N이 주어진다 지도 정보가 N * N 격자판이 주어진다. (격자에는 그 지역의 높이가 쓰여있다.) 격자판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역이다. 격자판의 가장자리는 0으로 초기화돼있다고 가정한다. 봉우리 지역이 몇 개 있는지 출력하기. 격자판의 숫자가 다음과 같다면 봉우리의 개수는 10개이다. ⚠️ 주의사항 상하좌우로 비교해야 하는데 (0,0)의 경우에는 왼쪽 위가 둘 다 null 값이라서 비교하려고 하면 오류가 난다. 가장자리가 0으로 초기화돼있다는 점을 이용해서 풀면 된다. 상하좌우 비교를 어떻게 하면 좋을지 생각해보기 ✍️ 이해 두 가지의 이해 내용이 있습니다. 아래는 제가 맨 처음 문제를 보고 이해하고 이렇게 풀면 되겠다 싶어서 적어 둔 것이 있습..

📖 문제 5 * 5 격자판에 아래와 같이 숫자가 주어진다. 행, 열, 대각선의 합 중 가잔 큰 합을 출력한다. ⚠️ 주의사항 모든 합이 주어진 배열에서 어떻게 최댓값 구할지 생각하기 모든 행과 열의 합 / 대각선의 합 각각의 for문으로 계산 ✍️ 이해 * 1. 첫 줄에 자연수 N 이 주어지고 N * N의 격자판이 주어지므로 이중 for문으로 temp[i][j] 값 입력 * 2. 행의 합 열의 합 두 대각선의 합 hap 배열에 저장 * 3. 대각선 할 때 왼쪽에서 오른쪽([0~4][0~4] 행 == 열) 과 오른쪽에서 왼쪽으로 [0][4] [1][3] [2][2] [3][1] [4][0] 행 = 열(N - i -1) 두 가지 생각 * 4. sort 정렬 후 size() - 1 해서 마지막 값 추출하면 끝..