HomeAbout Me

BOJ 1181 단어 정렬

By kuper0201
Published in 알고리즘
2021-03-05
1 min read
BOJ 1181 단어 정렬

Table Of Contents

01
문제
02
입력
03
풀이

문제

BOJ 1181 단어 정렬 바로 가기

알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.

길이가 짧은 것부터
길이가 같으면 사전 순으로


입력

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다.
주어지는 문자열의 길이는 50을 넘지 않는다.


풀이

주어진 기준대로 단어를 정렬하는 문제이다.

코드 보기(Java)
import java.io.*;
import java.util.*;

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

        for(int i = 0; i < N; i++) set.add(br.readLine());

        Comparator<String> comp = new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                if(o1.length() == o2.length()) return o1.compareTo(o2);
                return o1.length() - o2.length();
            }
        };

        String[] arr = set.toArray(new String[0]);
        Arrays.sort(arr, comp);

        for(int i = 0; i < arr.length; i++) System.out.println(arr[i]);
    }
}
코드 보기(C++)
#include <iostream>
#include <string>
#include <set>

using namespace std;

struct Comp {
    bool operator() (const string& s1, const string& s2) const {
        if(s1.size() == s2.size()) return s1 < s2;
        return s1.size() < s2.size();
    }
};

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    int N;
    cin >> N;
    
    set<string, Comp> sets;
    string tmp;
    
    for(int i = 0; i < N; i++) {
        cin >> tmp;
        
        sets.insert(tmp);
    }
    
    for(auto s : sets) cout << s << "\n";
    return 0;
}
코드 보기(Kotlin)
fun main(args: Array<String>) {
    var N = readLine()!!.toInt()
    var sets = mutableSetOf<String>()

    for(i in 0 until N) sets.add(readLine()!!)

    val srtSet = sets.sortedWith(Comparator<String> { s1, s2 ->
        if(s1.length == s2.length) s1.compareTo(s2)
        else s1.length - s2.length
    })

    srtSet.forEach {println(it)}
}
코드 보기(Python)
def main():
    N = int(input())
    sets = set()
    
    for i in range(0, N):
        sets.add(input())
    
    sets = sorted(sets, key = lambda x : (len(x), x))
    
    for i in sets:
        print(i)
        
if __name__ == "__main__":
    main()
코드 보기(Swift)
import Foundation

func main() {
    let N = Int(readLine()!)!
    var set : Set<String> = Set<String>()
    
    for i in 0..<N {
        set.insert(readLine()!)
    }
    
    var res = set.sorted{(a, b) -> Bool in
        if(a.count == b.count) {
            return a < b
        }
        return a.count < b.count
    }
    
    for i in res {
        print(i)
    }
}

main()

Tags

#algorithm
Previous Article
BOJ 1245 농장 관리
Next Article
BOJ 11758 CCW
kuper0201

kuper0201

안녕하세요!

Related Posts

BOJ 1009 분산처리
BOJ 1009 분산처리
2023-05-25
1 min

Quick Links

HomeAbout Me

Social Media