[BAEKJOON] 1181번 : 단어정렬 (JAVA)

2022. 9. 17. 22:17· Algorithm
반응형

- 알고리즘 분류 : 문자열, Comparable 인터페이스 구현

- 사용 언어 : JAVA

- 문제 요점

    - 중복 값은 HashSet으로 넣음. (소스에서는 안했지만 아예 처음부터 HashSet으로 해도 좋을듯)

    - hashSet 안에 있는 문자열들을 CustomString 배열로 넣어준다. 

    - Comparable 인터페이스로 구현했으니 정렬 진행

 

 

 

소스 설명은 주석을 참고해주세요.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.HashSet;

public class Main {

	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(br.readLine());
		
		// 1. String 배열에 입력받은 문자열을 넣는다.
		String[] strArr = new String[N];
		for(int i=0; i<N; i++) {
			strArr[i] = br.readLine();
		}
		
		// 2. String 배열 내에 중복이 있을 수 있으니 HashSet으로 변경한다. (HashSet은 중복을 허용하지 않음)
		HashSet<String> hashSet = new HashSet<>(Arrays.asList(strArr));
		
		// 3. 위의 hashSet 안에 있는 문자열들을 CustomString 배열로 넣어준다. 
		CustomString[] customArr = new CustomString[hashSet.size()];
		int i=0;
		for(String s : hashSet) {
			customArr[i] = new CustomString(s);
			i++;
		}
		
		// 4. 정렬한다. 
		// 참고) CustomString에서 Comparable 인터페이스를 구현함
		Arrays.sort(customArr);
		
		// 5. 출력을 빠르게 하기위해 BufferedWriter 이용 (System.out.println 사용해도 무방함)
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		for(CustomString cs : customArr) {
			bw.write(cs.str+"\n");
		}
		bw.flush();
		bw.close();
	}
	
	// Comparable인터페이스를 구현하기 위해 따로 클래스를 정의함
	public static class CustomString implements Comparable<CustomString>{
		String str;
		
		public CustomString(String s) {
			this.str = s;
		}	
			
		// compareTo 메소드를 잘 정의하면 Arrays.sort() 메소드 사용 가능
		public int compareTo(CustomString other) {
			// 1) 문자열의 길이가 짧은 것이 우선순위임.
			if(str.length() < other.str.length()) {
				return -1;
			}
			else if(str.length() > other.str.length()) {
				return 1;
			}
			// 문자열의 길이가 같다면
			else {
				// 문자열의 앞부터 문자 하나씩 확인해서 사전순으로 앞에 있는 것이 우선순위를 갖도록.
				// 만약 같다면, 다음 문자 확인하기 위해 반복문 사용
				for(int i=0; i<str.length(); i++) {
					if((int) this.str.charAt(i) < (int) other.str.charAt(i)) {
						return -1;
					}
					else if((int) this.str.charAt(i) > (int) other.str.charAt(i)) {
						return 1;
					}
				}
				return 0;
			}
		}
		
		
	}

}
반응형

'Algorithm' 카테고리의 다른 글

[BAEKJOON] 1541번 : 잃어버린 괄호 (JAVA)  (1) 2022.09.21
[BAEKJOON] 2583번 : 영역 구하기 (JAVA)  (0) 2022.09.18
[BAEKJOON] 1406번 : 에디터 (JAVA)  (0) 2022.09.08
[BAEKJOON] 11725번 : 트리의 부모 찾기 (JAVA)  (0) 2022.09.04
[BAEKJOON] 9934번 : 완전 이진 트리 (JAVA)  (0) 2022.09.03
'Algorithm' 카테고리의 다른 글
  • [BAEKJOON] 1541번 : 잃어버린 괄호 (JAVA)
  • [BAEKJOON] 2583번 : 영역 구하기 (JAVA)
  • [BAEKJOON] 1406번 : 에디터 (JAVA)
  • [BAEKJOON] 11725번 : 트리의 부모 찾기 (JAVA)
멍목
멍목
개발 관련 새롭게 알게 된 지식이나 좋은 정보들을 메모하는 공간입니다.
반응형
멍목
김멍목의 개발블로그
멍목
전체
오늘
어제
  • 분류 전체보기 (512) N
    • BE (190)
      • Spring (21)
      • Java (141)
      • Kotlin (6)
      • JPA (22)
    • FE (33)
      • Javascript (16)
      • Typescript (0)
      • React (5)
      • Vue.js (9)
      • JSP & JSTL (3)
    • DB (32)
      • Oracle (22)
      • MongoDB (10)
    • Algorithm (193) N
    • Linux (8)
    • Git (6)
    • etc (42)
    • ---------------------------.. (0)
    • 회계 (4)
      • 전산회계 2급 (4)
    • 잡동사니 (2)

블로그 메뉴

  • 홈
  • 관리

공지사항

인기 글

태그

  • 이펙티브 자바
  • Java to Kotlin
  • Oracle
  • MongoDB with Node.js
  • 자기 공부
  • MongoDB 공부
  • 자바공부
  • 자기개발
  • 자바 테스팅 프레임워크
  • 자기 개발
  • JPA
  • 더 자바 애플리케이션을 테스트하는 다양한 방법
  • 자바 개발자를 위한 코틀린 입문
  • 코테공부
  • 자기공부
  • 알고리즘 공부
  • Effective Java
  • 더 자바 Java 8
  • java 8
  • 알고리즘공부
  • MongoDB 기초부터 실무까지
  • 자바 공부
  • 전산회계 2급 준비
  • vue3 공부
  • 코테 공부
  • junit5
  • JPA 공부
  • 프로젝트로 배우는 Vue.js 3
  • 코틀린
  • 이펙티브자바

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
멍목
[BAEKJOON] 1181번 : 단어정렬 (JAVA)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.