Java 코딩테스트 공부/Java 알고리즘 공부

Java 스택, 큐 알고리즘4 + 빠른 입출력

2022. 8. 17. 19:59

https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%EC%BD%94%ED%85%8C%EB%8C%80%EB%B9%84/dashboard

 

자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 - 인프런 | 강의

자바(Java)로 코딩테스트를 준비하시는 분을 위한 강좌입니다. 코딩테스트에서 가장 많이 출제되는 Top 10 Topic을 다루고 있습니다. 주제와 연동하여 기초문제부터 중급문제까지 단계적으로 구성

www.inflearn.com

 

Queue

줄을 지어 순서대로 처리된다. FIFO의 형태를 가진다.

import java.util.LinkedList;

import java.util.Queue;

둘 다 import 해야 사용 가능하다.

 

Enqueue : 큐 맨 뒤에 데이터를 추가한다.

Dequeue : 큐 맨 앞쪽의 데이터를 삭제한다.

큐 한 쪽 끝을 front로 정하여 삭제 연산만 수행한다. 다른 한 쪽은 rear로 정해 삽입 연산만 수행한다.

그래프의 넓이 우선 탐색(BFS)에서 사용한다.

 

Queue 사용하기

Queue<Integer> queue = new LinkedList<>();

 

Queue에 값 추가하기

queue.offer(1);

 

Queue 값 삭제하기

queue.remove(); // 첫 번째 값 제거하기
queue.poll(); // 첫 번째 값 반환하고 제거하기, 비어있다면 null 반환한다.
queue.clear(); // queue 초기화하기

 

 

 

문제 6 :

첫 줄에 자연수 n(5<=n<=1000)과 k(2<=k<=9)가 주어진다.

n명의 왕자가 1부터 n번까지 시계방향으로 동그랗게 앉는다.

1번 왕자부터 시계방향으로 돌아가며 1부터 시작해 번호를 외치고,

한 왕자가 k를 외치면 그 왕자는 원 밖으로 나오게 된다.

그리고 다음 왕자부터 다시 1부터 시작해 번호를 외친다.

마지막까지 남아있게 되는 왕자 번호를 출력하는 프로그램을 작성하시오.

 

소스코드 :

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.LinkedList;
import java.util.Queue;

class Main {
	public int solution(int n, int k) {
		int answer = 0;
		Queue<Integer> Q = new LinkedList<>();
		for(int i=1; i<=n; i++) Q.offer(i);
		int t = n;
		while (t > 1) {
			// k번째 숫자가 삭제되면 그 다음 숫자로 가니까 int i=1 부터 시작
			for(int i=1; i<k; i++) Q.offer(Q.poll());
			Q.poll();
			t--;
		}
		answer = Q.poll();
		return answer;
	}

	public static void main(String[] args) throws IOException {
		Main T = new Main();
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); 
		StringTokenizer st = new StringTokenizer(br.readLine());
		int n = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(st.nextToken());
		bw.write(String.valueOf(T.solution(n, k)));
		bw.flush();
		bw.close();
	}
}

 

풀이 :

Queue에 인덱스가 없으므로 Q.offer(Q.poll());로 구현했다.

 

 

 

 

BufferedReader, Tokenizer, BufferedWriter 이용해서 빠른 입출력으로 코드를 구현하였다.

readLine()시 리턴값 String으로 고정되기 때문에 다른 타입으로 입력 받기 위해선 형변환을 해주어야 한다.

예시 ) int t = Integer.parseInt(br.readLine());

bw.write도 마찬가지로 int형일 경우 String.valueOf 이용해 string으로 바꿔준다.

import java.util.*;

import java.io.*;

로 해도 되는데 하나하나 입력해봤다.

아마 다음부턴 평소에 쓰던 입출력 코드를 작성할 것 같다..

'Java 코딩테스트 공부 > Java 알고리즘 공부' 카테고리의 다른 글

Java 정렬, 이분검색과 결정알고리즘 1  (0) 2022.09.02
Java 스택, 큐 알고리즘5 + deque  (0) 2022.08.20
Java 스택, 큐 알고리즘3  (0) 2022.08.16
Java 스택, 큐 알고리즘2  (0) 2022.08.15
Java 스택, 큐 알고리즘1  (0) 2022.08.14
'Java 코딩테스트 공부/Java 알고리즘 공부' 카테고리의 다른 글
  • Java 정렬, 이분검색과 결정알고리즘 1
  • Java 스택, 큐 알고리즘5 + deque
  • Java 스택, 큐 알고리즘3
  • Java 스택, 큐 알고리즘2
daramG
daramG
dotori Java
daramG
다람쥐의 개발 블로그
daramG
전체
오늘
어제
  • 분류 전체보기 (193)
    • Java 코딩테스트 공부 (67)
      • Java 알고리즘 공부 (37)
      • Java 백준 문제풀이 (27)
      • Java 코테 나만의 팁 (3)
    • SQL Study (0)
      • Programmers SQL 문제풀이 (0)
      • SQLP 준비 (0)
    • 웹 개발 지식 정리 (0)
      • Servlet (0)
      • Java 정리 (0)
    • 자바 스프링 (45)
      • 스프링 공부 (4)
      • 스프링 게시판 프로젝트 (6)
      • 부트 블로그 JPA 프로젝트 (30)
      • react & springboot (5)
      • 스프링 오류창고 (0)
      • 리액트 + 스프링 프로젝트 (0)
      • pf (0)
      • pfError (0)
    • React (6)
      • React 정리 (3)
      • React 오류 창고 (3)
    • C++ 코딩테스트 공부 (중단) (20)
      • c++ 백준 문제풀이 (15)
      • c++ 알고리즘 공부 (5)
    • Unity (3)
      • Unity 공부 (3)
    • WebRTC (2)
      • WebRTC 강의학습 정리 (0)
      • WebRTC 프로젝트 (1)
    • 김영한님의 스프링 강의 학습 (10)
      • 스프링 강의 목차 (1)
      • 인텔리제이 & 스프링 기초 (1)
      • 스프링 핵심 원리 (8)
    • 전공 지식 정리 (40)
      • interview (0)
      • Java (0)
      • 운영체제 (4)
      • 데이터베이스 설계 (10)
      • 소프트웨어 공학 (3)
      • 유닉스 (14)
      • 디지털 논리회로 (0)
      • 인공지능 (7)
      • js (0)
      • etc (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 김영한의 스프링 핵심 원리
  • 김영한 스프링 강의
  • 디지털 논리회로
  • React&Spring 강의수강
  • 데이터베이스 설계
  • Java 코테 나만의 팁
  • Java 백준 문제풀이
  • 유닉스
  • 백준 c++
  • 운영체제
  • 무서운 이야기
  • java 알고리즘
  • 노마드코더의 zoom클론코딩
  • 김영한 스프링 입문
  • 부트 jpa 게시판 프로젝트
  • C++ 알고리즘
  • 스프링부트 블로그 프로젝트
  • Unity 공부
  • 스프링 공부
  • 코테 알고리즘
  • 스프링 프로젝트
  • 스프링부트 프로젝트
  • java
  • 인공지능

최근 댓글

최근 글

hELLO · Designed By 정상우.
daramG
Java 스택, 큐 알고리즘4 + 빠른 입출력
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.