[백준풀이] 자바 알고리즘 -List내 특정 범위 순서 뒤집기

SeoYehJoon·2023년 8월 25일
0
post-thumbnail

문제



풀이


복잡하니 종이에다먼저 적어보았다.(#은 특정 반복문 단계를 뜻한다)


1. 반복횟수 먼저 살펴보자
짝수인 경우와 홀수인경우 모두 포용할 수 있다.
(홀수는 대신 중간숫자가 중간숫자로 스스로바뀌는 의미없는 연산이 한번 있음)


2. 바꿀 숫자를 어떻게 가르킬까? -> count 써보자.
앞에서 시작하는 인덱스는 start + count로 표현하고
뒤에서 앞으로가는 인덱스는 end-count로 표현하자



구현

package baek_10811;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Basket2 
{
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int N = Integer.parseInt(st.nextToken()), M = Integer.parseInt(st.nextToken());
		
		int[] list = new int[N];
		
		for(int i=0 ; i<list.length;i++)
		{
			list[i] = i+1;
		}
		
		for( int i = 0; i < M ; i++ )
		{
			st = new StringTokenizer(br.readLine());
			int start = Integer.parseInt(st.nextToken())-1,end = Integer.parseInt(st.nextToken())-1;
			//System.out.println("end : " + end); 디버그 코드
			int count =0;
			for(int j=0 ; j < (end-start)/2 + 1 ; j++)
			{
				int temp = list[ start+count ];
				list[ start+count ] = list[ end-count ];
				list[ end-count ] = temp;
				count ++;
			}
			//System.out.println("count : "+count); 디버그 코드
		}
		
		for(int i=0;i<list.length;i++)
		{
			System.out.print(list[i]+" ");
		}
	}
}
profile
책, 블로그 내용을 그대로 재정리하는 것은 가장 효율적인 시간 낭비 방법이다. 벨로그에 글을 쓸때는 직접 문제를 해결한 과정을 스크린샷을 이용해 정리하거나, 개념을 정리할때는 최소2,3개소스에서 이해한 지식을 정리한다.

0개의 댓글