Notice
Recent Posts
Recent Comments
Link
개발자는 기록이 답이다
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Stack,Queue_공주구하기_Queue) 본문
알고리즘/인프런 - Java알고리즘 입문
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Stack,Queue_공주구하기_Queue)
slow-walker 2023. 10. 1. 08:32
6. 공주구하기
예시 입력 1
8 3
예시 출력 1
7
내가 푼 풀이(Time: 165ms Memory: 27MB)
Q 원소의 사이즈가 1일때까지 반복문을 돌면서 1)cnt가 3일때 빼주고 cnt=0으로 재 세팅하고, 2)나머지는 다시 뒤로 넣습니다.
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
public int solution(int n, int k) {
Queue<Integer> queue = new LinkedList<>();
for (int i = 1; i <= n; i++) {
queue.offer(i);
}
int cnt = 0;
while (queue.size() > 1) {
int front = queue.poll();
cnt++;
if (cnt == k) cnt = 0;
else queue.offer(front);
}
return queue.peek();
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int k = kb.nextInt();
System.out.println(T.solution(n, k));
}
}
강의 풀이(Time: 163ms Memory: 27MB)
- Queue<Integer> queue = new LinkedList<>();
- q.offer(x) : 큐에 데이터 넣기
- q.poll() : 제일 앞에 있는거 꺼내기
- q.peek() : 제일 앞에 있는거 확인하기
- q.size() : 큐에 있는 원소 개수
- q.contains(x) : x가 큐에 포함되어 있는지
- q.isEmpty() : 스택과 큐같은 컬렉션 프레임워크는 주로 isEmpty()라는 메서드를 지원한다
먼저 n개까지 자연수를 큐에 전부 집어넣은 다음에, k-1개 만큼을 2번을 빼서 다시 집어넣어줍니다.
3번째인건 빼버리고, 다시 2개를 뒤로 넣고 3번째인건 빼는걸 Q의 원소개수가 1개가 남을때까지 반복합니다.
Q를 while문으로 순회할때 큐가 비어있으면 멈추던가 하면 됩니다.
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Answer {
public int solution(int n, int k) {
int answer = 0;
Queue<Integer> queue = new LinkedList<>();
// 먼저 큐에 1부터 n까지 넣어주기
for (int i = 1; i <= n ; i++) queue.offer(i);
// q가 비어있을때 까지 반복문 순회
while(!queue.isEmpty()) {
// 꺼내기용 반복문 : 2번 돌면서 i를 집어넣는게 아니라
// 기존에 넣어준거 꺼내서 다시 집어넣기
for (int i = 1; i < k; i++) queue.offer(queue.poll());
// 3번째꺼 빼내기
queue.poll();
// 원소 사이즈가 1이면 마지막남은 원소 꺼내기
if (queue.size()==1) answer = queue.poll();
}
return answer;
}
public static void main(String[] args) {
Answer T = new Answer();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int k = kb.nextInt();
System.out.println(T.solution(n, k));
}
}
'알고리즘 > 인프런 - Java알고리즘 입문' 카테고리의 다른 글
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Stack,Queue_응급실_Queue) (1) | 2023.10.01 |
---|---|
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Stack,Queue_교육과정설계_Queue) (1) | 2023.10.01 |
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Stack,Queue_쇠막대기_Stack) (1) | 2023.10.01 |
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Stack,Queue_후위식 연산_Stack) (0) | 2023.09.30 |
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Stack,Queue_크레인 인형뽑기_Stack) (0) | 2023.09.30 |