while(1) work();
반응형

링크

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

 

SW Expert Academy

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

swexpertacademy.com

 

분류

정렬

 

개인적 난이도

매우 쉬움 쉬움 보통 어려움 매우 어려움

 

핵심 알고리즘

이름을 최소 힙에 넣은 뒤 하나씩 빼며 출력하면 된다.

다만 중복된 이름은 map 구조를 이용해 체크한 뒤 힙에 넣지 않았다.

 

그런데, 지금 생각해보니 굳이 그렇게 하지 않고

모든 이름을 힙에 넣은 다음 하나씩 빼며 출력할때

이전에 출력한 이름과 지금 출력하려는 이름이 같은 경우 출력하지 않고 pop만 시켜주면

해결이 가능했을 것 같다.

 

시행착오

없음

 

코드

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

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

		for(int tc = 1; tc <= T; ++tc){
			int N = Integer.parseInt(br.readLine());
			Map<String, Boolean> m = new HashMap<String, Boolean>();
			Queue<Name> pq = new PriorityQueue<Name>();

			while (N-- > 0){
				String a = br.readLine();
				
				if (!m.containsKey(a)){
					pq.add(new Name(a));
					m.put(a, true);
				}
			}

			if (tc > 1) System.out.println();
			System.out.print("#" + tc);
	
			while (!pq.isEmpty()){
				System.out.print("\n" + pq.poll().name);
			}
		}
	}

	static class Name implements Comparable<Name>{
		String name;

		public Name(String name){
			this.name = name;
		}

		public int compareTo(Name n){
			int lenA = this.name.length(), lenB = n.name.length();
			if (lenB < lenA) return 1;
			if (lenA < lenB) return -1;
	
			if (n.name.compareTo(this.name) < 0) return 1;
			return -1;
		}
	}
}
반응형

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

1767. 프로세서 연결하기  (0) 2022.02.16
9999. 광고 시간 정하기  (0) 2022.02.16
3282. 0/1 Knapsack  (0) 2022.02.16
3304. 최장 공통 부분 수열  (0) 2022.02.16
1244. 최대 상금  (0) 2022.02.16
profile

while(1) work();

@유호건

❤️댓글은 언제나 힘이 됩니다❤️ 궁금한 점이나 잘못된 내용이 있다면 댓글로 남겨주세요.

검색 태그