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();

@유호건

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

검색 태그