[SWEA] #1221 - GNS

2022. 3. 11. 23:19
728x90
반응형

※ 문제에 대한 저작권은 SW Expert Academy에 있습니다.

💡 출처


https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14jJh6ACYCFAYD 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

💡 문제


[설명]

숫자 체계가 우리와 다른 어느 행성이 있다. 아래는 이 행성에서 사용하는 0 ~ 9의 값을 순서대로 나타낸 것이다.

"ZRO", "ONE", "TWO", "THR", "FOR", "FIV", "SIX", "SVN", "EGT", "NIN"

0 ~ 9의 값을 나타내는 단어가 섞여 있는 문자열을 받아 작은 수부터 차례로 정렬하여 출력하는 프로그램을 작성하라.

예를 들어 입력 문자열이 "TWO NIN TWO TWO FIV FOR" 일 경우 정렬한 문자열은 "TWO TWO TWO FOR FIV NIN" 이 된다.

 

💡 아이디어


우선 입력 문자열과 비교를 위해

"ZRO", "ONE", "TWO", "THR", "FOR", "FIV", "SIX", "SVN", "EGT", "NIN"을 가지는 String배열을 선언한다.

그리고 Counting Sort(기수 정렬)를 위해 0 ~ 9 인덱스를 가지는 int 배열을 선언한다.

입력 문자열과 String배열을 비교하여 int배열의 해당 인덱스의 수를 +1 해준다.

마지막으로 int 배열의 각 인덱스가 가지는 수만큼 반복해 해당 문자열을 출력해주면 정렬이 완료된다.

 

💡 소스코드


package SWEA;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class SWEA_P1221_GNS {
	static String[] pattern = { "ZRO", "ONE", "TWO", "THR", "FOR", "FIV", "SIX", "SVN", "EGT", "NIN" };

	public static void main(String[] args) throws Exception {
		System.setIn(new FileInputStream("./SWEA_INPUT/SWEA_P1221_input.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer sz;
		int T = Integer.parseInt(br.readLine());

		for (int TC = 1; TC <= T; TC++) {
			sz = new StringTokenizer(br.readLine());
			sz.nextToken();// #테스트 케이스
			int N = Integer.parseInt(sz.nextToken());// 입력 사이즈

			int[] counting = new int[10];// 기수정렬을 위한 배열

			sz = new StringTokenizer(br.readLine());// 한 줄을 입력받아
			for (int i = 0; i < N; i++) {
				String str = sz.nextToken();
				counting[PatternNum(str)]++;//입력받은 문자열과 매치되는 counting 값을 1 증가
			}

			System.out.println("#" + TC + " ");

			for (int i = 0; i < counting.length; i++) {
				for (int j = 0; j < counting[i]; j++)
					System.out.print(pattern[i] + " ");
			}

			System.out.println("");
		}
		br.close();
	}

	// "ZRO", "ONE", "TWO", "THR", "FOR", "FIV", "SIX", "SVN", "EGT", "NIN"와 매치되는 숫자를 반환
	public static int PatternNum(String str) {
		switch (str) {
		case "ZRO":
			return 0;
		case "ONE":
			return 1;
		case "TWO":
			return 2;
		case "THR":
			return 3;
		case "FOR":
			return 4;
		case "FIV":
			return 5;
		case "SIX":
			return 6;
		case "SVN":
			return 7;
		case "EGT":
			return 8;
		case "NIN":
			return 9;
		}
		return -1;
	}
}

 

💡 결과


728x90
반응형

'Algorithm > SW Expert Academy' 카테고리의 다른 글

[SWEA] #1226 - 미로1  (0) 2022.03.15
[SWEA] #1225 - 암호생성기  (0) 2022.03.11
[SWEA] #1224 - 계산기3  (0) 2022.03.09
[SWEA] #1220 - Magnetic  (0) 2022.03.09
[SWEA] #1219 - 길찾기  (0) 2022.03.08

BELATED ARTICLES

more