본문 바로가기

Algorithm/문제풀이

[백준] 1181번: 단어 정렬

문제링크https://www.acmicpc.net/problem/1181

 

문제풀이 : 입력받은 데이터를 sort()함수로 정렬한다.

1. 길이비교 2. 길이가 같은 경우는 사전순대로 정렬해야 하므로 비교 함수를 따로 정의하여 같이 넘겨준다.

 

소스코드(C++)

/*
 * 백준 1181번: 단어 정렬
 */

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

bool compare(string a, string b) {
	if (a.length() == b.length())
		return a < b;
	else
		return a.length() < b.length();
}

int main() {
	int N;
	cin >> N;
	
	string* arr = new string[N];
	for (int i = 0; i < N; i++) {
		cin >> arr[i];
	}

	sort(arr, arr + N, compare);

	cout << arr[0] << endl;
	for (int i = 1; i < N; i++) {
		if (arr[i - 1].compare(arr[i]) == 0) continue;
		cout << arr[i] << endl;
	}
}

 

소스코드(Java)

import java.io.*;
import java.util.*;

public class p_1181 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());

		Set<String> set = new TreeSet<String>(new Comparator<String>() {
			@Override
			public int compare(String s1, String s2) {
				// TODO Auto-generated method stub
				// 길이가 같은 경우
				if (s1.length() == s2.length()) {
					return s1.compareTo(s2);
				}
				// 길이 비교
				else {
					if (s1.length() < s2.length()) return -1;
					else return 1;
				}
			}
		});
		
		for (int i = 0; i < N; i++) {
			set.add(br.readLine());
		}

		Iterator<String> itr = set.iterator();
		while (itr.hasNext()) {
			System.out.println(itr.next());
		}
		
//		String[] arr = new String[N];
//		for (int i = 0; i < N; i++) {
//			arr[i] = br.readLine();
//		}
//		
//		Arrays.sort(arr, new Comparator<>() {
//			@Override
//			public int compare(String s1, String s2) {
//				// TODO Auto-generated method stub
//				// 길이가 같은 경우
//				if (s1.length() == s2.length()) {
//					return s1.compareTo(s2);
//				}
//				// 길이 비교
//				else {
//					if (s1.length() < s2.length()) return -1;
//					else return 1;
//				}
//			}
//		});
//		
//		// 중복 제거
//		for (int i = 0; i < arr.length - 1; i++) {
//			if (arr[i].equals(arr[i + 1])) continue;
//			
//			System.out.println(arr[i]);
//		}
//		
//		// 마지막 값 출력
//		System.out.println(arr[N - 1]);
	}
}

 

'Algorithm > 문제풀이' 카테고리의 다른 글

[백준] 9095번: 1, 2, 3 더하기  (0) 2019.06.11
[백준] 1463번: 1로 만들기  (0) 2019.06.11
[백준] 1427번: 소트인사이드  (0) 2019.06.09
[백준] 2108번: 통계학  (0) 2019.06.09
[백준] 10989번: 수 정렬하기3  (0) 2019.06.08