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 자리가 정해졌으므로) )

실행 종료