Java/실습
[Java] 카드 정렬
tmd1
2022. 5. 21. 01:11
문제:
숫지-무늬 트럼프 카드 정렬
첫 번째 줄 입력할 카드 수 입력
숫자가 내림차 순이 되도록 정렬
같은 숫자끼리는 입력한 순서 유지
입력:
8
1 S
2 D
7 H
4 S
9 H
4 D
5 C
7 C
출력:
9 H
7 H
7 C
5 C
4 S
4 D
2 D
1 S
코드:
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String card = sc.nextLine();
int cardNum = Integer.parseInt(card);
int [] cardNumber = new int[cardNum];
String [] cardPattern = new String[cardNum];
for(int i=0;i<cardNum;i++) {
cardNumber[i] = sc.nextInt();
cardPattern[i] = sc.next();
}
int tempN = 0;
String tempP;
for(int k=0;k<cardNum-1;k++) { // 완전히 정렬될 때 까지 반복
for(int j=0;j<cardNum-1-k;j++) { // 내림차순 정렬
if(cardNumber[j] < cardNumber[j+1]) {
tempN = cardNumber[j];
cardNumber[j] = cardNumber[j+1];
cardNumber[j+1] = tempN;
tempP = cardPattern[j];
cardPattern[j] = cardPattern[j+1];
cardPattern[j+1] = tempP;
}
}
}
for(int l=0;l<cardNum;l++) {
System.out.println(cardNumber[l]+" "+cardPattern[l]);
}
}
for 문의 경우 배열의 길이를 통해 제한을 두어야하나 cardNum이 곧 배열의 길이이므로 그대로 사용함
코드 아랫부분에 이중포문이 사용되었는데 이에 대해 이해가 어려울 수 있다.
이중 포문 예시)
베열 = [ 4, 7, 3, 1, 9, 5 ] 를 내림차 순으로 정리
오른쪽 원소와 비교하여 더 큰 수를 왼쪽으로 이동함
1회) == for k
7 4 3 9 5 1 ( 5번 비교 후 자리 이동 ) == for j
2회)
7 4 9 5 3 1 ( 4번 비교 후 자리 이동 (1 자리가 정해졌으므로) )
3회)
7 9 5 4 3 1 ( 3번 비교 후 자리 이동 (3 1 자리가 정해졌으므로) )
4회)
9 7 5 4 3 1 ( 2번 비교 후 자리 이동 (4 3 1 자리가 정해졌으므로) )
5회)
9 7 5 4 3 1 ( 1번 비교 후 자리 이동 (5 4 3 1 자리가 정해졌으므로) )
실행 종료