πŸ“ algorithm

[λ°±μ€€] 2605 μ€„μ„Έμš°κΈ° JAVA 문제 풀이 (μ‚Όμ„± sw μ—­λŸ‰ ν…ŒμŠ€νŠΈ IM λŒ€λΉ„ - 3)

c0zi 2024. 1. 27. 13:15

πŸ“‘ 문제 μ„€λͺ…

μ μ‹¬μ‹œκ°„μ΄ λ˜λ©΄ λ°˜ ν•™μƒ λͺ¨λ‘κ°€ ν•œ μ€„λ‘œ μ€„을 μ„œμ„œ κΈ‰μ‹μ„ νƒ„λ‹€. κ·ΈλŸ°λ° λ§€μΌ κ°™μ΄ μ•žμžλ¦¬μ— μ•‰μ€ ν•™μƒλ“€μ΄ μ•žμ— μ€„을 μ„œ λ¨Όμ € μ μ‹¬μ„ λ¨Ήκ³ , λ’·μžλ¦¬μ— μ•‰μ€ ν•™μƒλ“€μ€ λ’€μ— μ€„을 μ„œ λŠ¦κ²Œ μ μ‹¬μ„ λ¨Ήκ²Œ λœλ‹€. μ–΄λ–»κ²Œ ν•˜λ©΄ μ΄λŸ¬ν•œ μƒν™©μ„ λ°”κΎΈμ–΄ λ³Ό μˆ˜ μžˆμ„κΉŒ κ³ λ―Όν•˜λ˜ μ€‘ μ„ μƒλ‹˜μ΄ ν•œ κ°€μ§€ λ°©λ²•을 λ‚΄ λ†“μ•˜λ‹€. κ·Έ λ°©λ²•은 λ‹€μŒκ³Ό κ°™λ‹€.

학생듀이 ν•œ μ€„λ‘œ μ€„을 μ„  ν›„, μ²« λ²ˆμ§Έ ν•™μƒλΆ€ν„° μ°¨λ‘€λ‘œ λ²ˆν˜Έλ₯Ό λ½‘λŠ”λ‹€. μ²« λ²ˆμ§Έλ‘œ μ€„을 μ„  ν•™μƒμ€ λ¬΄μ‘°κ±΄ 0번 λ²ˆν˜Έλ₯Ό λ°›μ•„ μ œμΌ μ•žμ— μ€„을 μ„ λ‹€. λ‘ λ²ˆμ§Έλ‘œ μ€„을 μ„  ν•™μƒμ€ 0번 λ˜λŠ” 1번 λ‘˜ μ€‘ ν•˜λ‚˜μ˜ λ²ˆν˜Έλ₯Ό λ½‘λŠ”λ‹€. 0λ²ˆμ„ λ½‘μœΌλ©΄ κ·Έ μžλ¦¬μ— κ·ΈλŒ€λ‘œ μžˆκ³ , 1λ²ˆμ„ λ½‘μœΌλ©΄ λ°”λ‘œ μ•žμ˜ ν•™μƒ μ•žμœΌλ‘œ κ°€μ„œ μ€„을 μ„ λ‹€. μ„Έ λ²ˆμ§Έλ‘œ μ€„을 μ„  ν•™μƒμ€ 0, 1 λ˜λŠ” 2 μ€‘ ν•˜λ‚˜μ˜ λ²ˆν˜Έλ₯Ό λ½‘λŠ”λ‹€. κ·Έλ¦¬κ³  λ½‘은 λ²ˆν˜Έλ§ŒνΌ μ•žμžλ¦¬λ‘œ κ°€μ„œ μ€„을 μ„ λ‹€. λ§ˆμ§€λ§‰μ— μ€„을 μ„  ν•™μƒκΉŒμ§€ μ΄μ™€ κ°™μ€ λ°©μ‹μœΌλ‘œ λ½‘은 λ²ˆν˜Έλ§ŒνΌ μ•žμœΌλ‘œ κ°€μ„œ μ€„을 μ„œκ²Œ λœλ‹€. κ°μž λ½‘은 λ²ˆν˜ΈλŠ” μžμ‹ μ΄ μ²˜μŒμ— μ„  μˆœμ„œλ³΄λ‹€λŠ” μž‘은 μˆ˜μ΄λ‹€.

예λ₯Ό λ“€μ–΄ 5λͺ…μ˜ ν•™μƒμ΄ μ€„을 μ„œκ³ , μ²« λ²ˆμ§Έλ‘œ μ€„을 μ„  ν•™μƒλΆ€ν„° λ‹€μ„― λ²ˆμ§Έλ‘œ μ€„을 μ„  ν•™μƒκΉŒμ§€ μ°¨λ‘€λ‘œ 0, 1, 1, 3, 2번의 λ²ˆν˜Έλ₯Ό λ½‘μ•˜λ‹€κ³  ν•˜μž, μ²« λ²ˆμ§Έ ν•™μƒλΆ€ν„° λ‹€μ„― λ²ˆμ§Έ ν•™μƒκΉŒμ§€ 1λΆ€ν„° 5둜 ν‘œμ‹œν•˜λ©΄ ν•™μƒλ“€μ΄ μ€„을 μ„  μˆœμ„œλŠ” λ‹€μŒκ³Ό κ°™μ΄ λœλ‹€.

 

  • 첫 번째 학생이 번호λ₯Ό 뽑은 ν›„ : 1
  • 두 번째 학생이 번호λ₯Ό 뽑은 ν›„ : 2 1
  • μ„Έ 번째 학생이 번호λ₯Ό 뽑은 ν›„ : 2 3 1
  • λ„€ λ²ˆμ§Έ ν•™μƒμ΄ λ²ˆν˜Έλ₯Ό λ½‘은 ν›„ : 4 2 3 1
  • λ‹€μ„― 번째 학생이 번호λ₯Ό 뽑은 ν›„ : 4 2 5 3 1


λ”°λΌμ„œ μ΅œμ’…μ μœΌλ‘œ ν•™μƒλ“€μ΄ μ€„을 μ„  μˆœμ„œλŠ” 4, 2, 5, 3, 1이 λœλ‹€.

쀄을 μ„  ν•™μƒλ“€μ΄ μ°¨λ‘€λ‘œ λ½‘은 λ²ˆν˜Έκ°€ μ£Όμ–΄μ§ˆ λ•Œ ν•™μƒλ“€μ΄ μ΅œμ’…μ μœΌλ‘œ μ€„을 μ„  μˆœμ„œλ₯Ό μΆœλ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

⌨ μž…λ ₯

첫째 μ€„μ—λŠ” ν•™μƒμ˜ μˆ˜κ°€ μ£Όμ–΄μ§€κ³  λ‘˜μ§Έ μ€„μ—λŠ” μ€„을 μ„  μ°¨λ‘€λŒ€λ‘œ ν•™μƒλ“€μ΄ λ½‘은 λ²ˆν˜Έκ°€ μ£Όμ–΄μ§„λ‹€. ν•™μƒμ˜ μˆ˜κ°€ 100 μ΄ν•˜μ΄κ³ , ν•™μƒλ“€μ΄ λ½‘λŠ” λ²ˆν˜ΈλŠ” 0 λ˜λŠ” μžμ—°μˆ˜μ΄λ©° ν•™μƒλ“€μ΄ λ½‘은 λ²ˆν˜Έ μ‚¬μ΄μ—λŠ” λΉˆ μΉΈμ΄ ν•˜λ‚˜μ”© μžˆλ‹€.


πŸ’» 좜λ ₯

학생듀이 μ²˜μŒμ— 쀄을 μ„  μˆœμ„œλŒ€λ‘œ 1λ²ˆλΆ€ν„° 번호λ₯Ό λ§€κΈΈ λ•Œ, 첫째 쀄에 학생듀이 μ΅œμ’…μ μœΌλ‘œ 쀄을 μ„  μˆœμ„œλ₯Ό κ·Έ 번호둜 좜λ ₯ν•œλ‹€. 학생 번호 μ‚¬μ΄μ—λŠ” ν•œ 칸의 곡백을 좜λ ₯ν•œλ‹€.

 

예제 μž…λ ₯ 1
5
0 1 1 3 2

 

예제 좜λ ₯ 1
4 2 5 3 1

 

πŸ“ 문제 ν•΄κ²°

 

1. ν•™μƒμˆ˜λ₯Ό κ΅¬ν•˜κ³  λ°°μ—΄ λ§Œλ“€κΈ°

2. 학생 수만큼 λ°˜λ³΅ν•˜λ©° μž…λ ₯ λ°›λŠ” 수 n만큼 μ•žμœΌλ‘œ 가도둝  arrayList.add(index, value) μ‚¬μš©

 

package test;

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

public class Main {

	public static void main(String[] args) throws IOException {

		// bufferedReader μ‚¬μš©ν•΄ ν•™μƒμˆ˜ κ΅¬ν•˜κΈ°
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int student = Integer.parseInt(br.readLine());
		
        // 쀄을 μ„Έμš°κΈ° μœ„ν•œ λ°°μ—΄ λ§Œλ“€κΈ°
		ArrayList<Integer> order = new ArrayList<>();
		StringTokenizer st = new StringTokenizer(br.readLine());

		// 학생 수만큼 반볡 -> μž…λ ₯ λ°›λŠ” 수 n 만큼 μ•žμœΌλ‘œ 이동
		for (int i = 0; i < student; i++) {
			int n = Integer.parseInt(st.nextToken());
			order.add(i - n, i + 1);
		}
        
        // 좜λ ₯
		for (int i : order) {
			System.out.print(i + " ");

		}
	}
}

 

⭐ μƒˆλ‘­κ²Œ μ•Œκ²Œ 된 점

ArrayListμ—μ„œ indexλ₯Ό μ΄μš©ν•΄ 값을 μΆ”κ°€ν•˜λŠ” κ±Έ μƒˆλ‘œ μ•Œκ²Œ λ˜μ—ˆλ‹€.
- arrayList.add(index, value)