문제 링크 : https://www.acmicpc.net/problem/10431
난이도 |
알고리즘 | |
실버5 | 구현, 시뮬레이션 |
1. 요구 사항 이해
시간, 메모리 제한 : 1초 / 256MB
주어진 방법대로 줄 서기를 시뮬레이션하면서 몇 번 뒤로 물러서는지를 계산.
* P: 테스트 케이스의 수 (1 ≤ P ≤ 1000)
* T : 각 테스트 케이스 번호
* 테스트 케이스는 20개의 양의 정수가 공백으로 구분되어 주어짐.
2. 설계/검증
입력
- 테스트 케이스의 수
- 테스트 케이스의 번호
- 테스트 케이스 번호에 해당하는 원소
시간 복잡도 | 최악의 경우 | 공간 복잡도 |
O(1) | -- | O(1) |
3. 정상 코드
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int P = scan.nextInt(); // 테스트 케이스의 수
for (int i = 0; i < P; i++) {
int T = scan.nextInt(); // 테스트 케이스의 번호
int[] heights = new int[20];
for (int j = 0; j < 20; j++) {
heights[j] = scan.nextInt();
}
int totalSteps = calculateTotalSteps(heights);
System.out.println(T + " " + totalSteps);
}
scan.close();
}
private static int calculateTotalSteps(int[] h) {
int totalSteps = 0;
for (int i = 0; i < 20; i++) {
for (int j = i + 1; j < 20; j++) {
if (h[i] > h[j]) {
totalSteps++;
}
}
}
return totalSteps;
}
}
4. 처리 과정 추적 코드
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int P = scan.nextInt(); // 테스트 케이스의 수 입력
// 각 테스트 케이스에 대한 처리
for (int i = 0; i < P; i++) {
int T = scan.nextInt(); // 테스트 케이스의 번호 입력
int[] heights = new int[20]; // 학생들의 키 배열 초기화
System.out.println("\n[입력]----------------------------------");
System.out.println("테스트 케이스 번호: " + T);
// 각 학생의 키 입력
for (int j = 0; j < 20; j++) {
heights[j] = scan.nextInt();
System.out.println("학생 " + (j+1) + "의 키: " + heights[j]);
}
// 총 이동 횟수 계산 및 출력
int totalSteps = calculateTotalSteps(heights);
System.out.println("\n[결과]----------------------------------");
System.out.println("총 이동 횟수: " + totalSteps);
System.out.println(T + " " + totalSteps);
}
// Scanner 객체 닫기
scan.close();
}
// 총 이동 횟수를 계산하는 메서드
private static int calculateTotalSteps(int[] h) {
int totalSteps = 0;
System.out.println("\n[이동 횟수 계산]--------------------------");
// 모든 학생들에 대한 키를 비교하며 이동 횟수를 계산
for (int i = 0; i < 20; i++) {
for (int j = i + 1; j < 20; j++) {
System.out.println("비교: 학생 " + (i + 1) + "의 키(" + h[i] + ") vs 학생 " + (j + 1) + "의 키(" + h[j] + ")");
if (h[i] > h[j]) {
totalSteps++;
System.out.println("이동 발생! 현재 총 이동 횟수: " + totalSteps);
}else {
System.out.println("이동 없음");
}
}
}
return totalSteps;
}
}
추가 정리
배열에 원소를 입력받기
int[] arr = new int[크기];
for(int i = 0; i < arr.lenght; i++){
arr[i] = scan.nextInt();
// arr[scan.nextInt()]++ 동일한 기능의 코드
}
'◖코딩 테스트◗▬▬▬▬▬▬▬▬▬ > 백준' 카테고리의 다른 글
[백준](2024) 진법 변환 2 (설명/코드/정답) (0) | 2024.02.21 |
---|---|
[백준](2024) 유레카 이론 (설명/코드/정답) (0) | 2024.02.21 |
[백준](2024) 성 지키기 (설명/코드/정답) (0) | 2024.02.20 |
[백준](2024) ✔️개미 (설명/코드/정답) (0) | 2024.02.20 |
[백준](2024) 소금 폭탄 (설명/코드/정답) (0) | 2024.02.20 |