[백준] 10811번: 바구니 뒤집기 - JAVA

2024. 9. 16. 02:46·알고리즘

[작성일: 2023. 08. 27]

 

https://www.acmicpc.net/problem/10811

 

 

풀이

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception{

        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.valueOf(st.nextToken());  // 바구니의 수
        int m = Integer.valueOf(st.nextToken());  // m번 바구니의 순서부터 역순으로

        int[] basket = new int[n];

        for (int i = 0; i < basket.length; i++) {
            basket[i] = i + 1;
        }

        for (int i = 0; i < m; i++) {
            StringTokenizer st2 = new StringTokenizer(br.readLine());
            int start = Integer.valueOf(st2.nextToken());
            int end = Integer.valueOf(st2.nextToken());

            for (int j = 0; start+j < end-j; j++) {
                int tmp = basket[start + j - 1];
                basket[start + j - 1] = basket[end - j - 1];
                basket[end - j - 1] = tmp;
            }
        }

        for (int i = 0; i < basket.length; i++) {
            bw.write(basket[i] + " ");
        }
        br.close();
        bw.flush();
        bw.close();
    }
}

 

예제로 풀어서 설명하면 도현이는 바구니 5개를 가지고 있고 1번부터 5번까지의 바구니를 가지고 있다. [1 2 3 4 5]

1 2 를 입력받으면 1번부터 2번 바구니의 순서를 역으로 바꾸면 된다. 그럼 [2 1 3 4 5]가 된다. 

3 4 를 입력받으면 3번부터 4번까지의 바구니 순서를 역으로 바꾸면 된다. [2 1 4 3 5]

1 4 를 입력받으면 1번부터 4번까지의 바구니 순서를 역으로 바꾸면 된다. [3 4 1 2 5]

2 2 를 입력받았을 경우에는 바구니의 순서에 영향이 없다.

 

이 문제를 해결하려면 start(바구니 시작 순서)와 end(바구니 끝 순서)를 입력 받고, tmp(임시 변수)를 선언해야 한다.

for(j=0, j+start<end-j; j++)로 작성한 이유는 start가 1이고 end가 4일 때, 처음에는 j가 0이고 1<4가 된다.

현재 바구니가 2 1 4 3 5라고 가정할 때, basket[start + j - 1]인 basket[0]에 있는 2와 basket[end - j - 1]인 basket[3]에 있는 3의 위치를 바꾼다. (바구니는 3 1 4 2 5가 된다.)

 

그 다음 증감 연산자로 인해 j가 1이 되고 2<3가 된다.  현재 바구니는 3 1 4 2 5이다.

basket[start + j - 1]은 basket[1]이고 basket[end - j - 1]은 basket[2]이다. 이 둘의 위치를 바꾸면 3 4 1 2 5가 된다.

 

저작자표시 비영리 변경금지 (새창열림)
'알고리즘' 카테고리의 다른 글
  • [백준] 2444번: 별 찍기(7) - JAVA
  • [백준] 2908번: 상수 - JAVA
  • [백준] 10813번: 공 바꾸기 - JAVA
  • [백준] 10810번: 공 넣기 - JAVA
뚜비
뚜비
1년차 백엔드&iOS 개발자의 감자 탈출 블로그 🥔🥔
  • 뚜비
    뚜비의 개발로그
    뚜비
  • 전체
    오늘
    어제
  • 글쓰기     관리
    • Devlog
      • Back-End
        • Java
        • Spring
        • JPA
        • HTTP
        • Security
        • Back-End
        • Front-End
      • 알고리즘
      • iOS
        • Swift
      • Database
      • Tips
        • Git & GitHub
        • A to Z
      • 프로젝트
      • 생각정리
  • 태그

    Java
    DB
    알고리즘
    데이터베이스
    javascript
    spring
    스프링
    HTTP
    Spring Security
    프로그래머스
    게시판만들기
    생성자
    html
    Database
    JPA
    MVC
    객체
    자바
    sql
    백준
    다형성
    김영한
    의존성주입
    최주호
    Swift
    Security
    자바스크립트
    jsp
    변수
    성능최적화
  • hELLO· Designed By정상우.v4.10.0
뚜비
[백준] 10811번: 바구니 뒤집기 - JAVA
상단으로

티스토리툴바