이 문제는 Linkedlist를 활용해서 풀었다
이 문제는 K값의 인덱스 값에 맞는 리스트를 삭제하는 문제이다
package S4_Baekjoon;
import java.util.LinkedList;
import java.util.Scanner;
public class Baekjoon1158 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
// 사용자로부터 N과 K를 입력받음
int N = sc.nextInt();
int K = sc.nextInt();
// 1부터 N까지의 수를 가진 LinkedList 생성
LinkedList<Integer> list = new LinkedList<>();
for(int i = 1; i <= N; i++){
list.add(i);
}
// 결과를 담을 StringBuilder 초기화
StringBuilder sb = new StringBuilder();
sb.append("<");
// 현재 위치를 나타내는 변수
int count = 0;
// LinkedList가 비어있지 않은 동안 반복
while(!list.isEmpty()){
// K번째 위치를 찾음 (원형 리스트로 간주)
count = (count + K -1) % list.size();
// K번째 위치의 요소를 제거하고 그 값을 StringBuilder에 추가
sb.append(list.remove(count)).append(", ");
}
// 마지막에 추가된 ', '를 '>'로 교체
sb.replace(sb.length()-2, sb.length(), ">");
// 결과 출력
System.out.println(sb);
}
}
주어진 리스트에서 K번째 요소를 계속 제거하는 방식으로 진행된다.
count = (count + K -1) % list.size();
내가 어려워했던 부분이다.
count값을 0으로 선언하고 K-1(삭제될 인덱스 값)만큼 계속 커지지만 list.size()를 통해 나머지 처리로 반복적인 리스트로 작성해줄수 있었다.
처음에는 count와 index 변수를 만들어서 index가 list.size()보다 크면 처음으로 돌아가는 식으로 짜려했는데
%를 활용해서 풀 수 있다는건 몰랐다. 아직 문제풀이능력이 부족하다고 생각했다.