1181 단어 정렬

문제 이해

N개의 단어가 들어온다.
아래 2개 조건에 따라 정렬한다.

  1. 길이 기준으로 오름차순 정렬한다.

  2. 길이가 같을 경우 사전 순으로(ASCII 코드 기준) 정렬한다.


문제 풀이

Class를 생성하고, Comparable 인터페이스를 통해 문자열 길이를 기준으로 오름차순 정렬되도록 구현하면 된다.
이 때 중복되는 문자열은 한 번만 출력한다.


코드

import java.util.*;

class Word implements Comparable<Word>{
	int length; // 문자열 길이 저장
	String str; // 문자열
	
	public Word(String str) {
		length = str.length();
		this.str = str;
	}
	
	@Override
	public int compareTo(Word w) {
		if(w.length==this.length) {
            // 문자열 길이가 같을 경우 사전 순으로 정렬
			return this.str.compareTo(w.str);
		}
		
		return this.length - w.length;
        // 문자열 길이를 기준으로 오름차순 정렬
	}
}

public class Main {
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		int N = sc.nextInt();
		Word[] words = new Word[N];
		
		String str;
		for(int i =0;i<N;i++) {
			str = sc.next();
			words[i] = new Word(str);
		}

		Arrays.sort(words); // Sorting 과정
		StringBuilder sb = new StringBuilder();
		
		String tmp = ""; // 이전에 출력했던 값을 저장할 변수
		String now;
		for(int i =0;i<N;i++) {
			now = words[i].str;
			if(now.equals(tmp)) {
                // 만약 이전에 출력했던 값과 동일한 경우 재출력하지 않기 위해
                // 아래 명령을 수행하지 않는다.
				continue;
			}
			tmp = now;
			sb.append(tmp+"\n");
		}
		System.out.println(sb);
	}
}

결과

  • 2번째 줄 틀렸습니다 : 중복되는 값은 1번만 출력한다는 문구를 읽지 못해 중복 출력시켜 생기는 문제였다. tmp에 이전에 출력되었던 값을 저장하고, 만약 tmp에 저장된 값과 현재 확인하는 문자열이 동일할 경우 continue를 통해 넘어가는 방식으로 구현하였다. 문제 제한 조건을 잘 읽어보는 것이 중요할 것 같다.

좋은 웹페이지 즐겨찾기