[백준] 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
      • 프로젝트
      • 생각정리
  • 태그

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

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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