스터디/알고리즘 스터디

[백준 알고리즘] 1181 단어 정렬 (21.05.09)

sleesm 2021. 5. 9. 20:19

 

이전 이야기 ....

 

 

2021.05.09 - [알고리즘 스터디] - [백준 알고리즘] 11650 좌표 정렬하기 (21.05.09)

 

[백준 알고리즘] 11650 좌표 정렬하기 (21.05.09)

오늘은 바로바로 정렬 입니다요!!!! 그래서 오늘의 문제는 백준 11650번 입력 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,00

sleecode.tistory.com

 

 

 


 

 

 

다음 정렬 문제는 !!!!!

 

 

 

백준 1181 단어 정렬

 

 

입력

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

 

출력

조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.

 

 

문제 사이트 : www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

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

www.acmicpc.net

 


 

여기서 핵심 포인트!!!

 

 

- 정렬을 어떻게 할 것인가

 

- 중복 확인을 하는 방법!!!!!

 


 

 

 

 

직접 작성해본 소스코드 및 간단한 설명

 

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main {

	static int N;
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		N = sc.nextInt();
		String[] word = new String[N];
		for(int i = 0; i< N; i++) {
			word[i] = sc.next();
		}
		
		Arrays.sort(word, new Comparator<String>() {		
			@Override
			public int compare(String s1, String s2) {
				if(s1.length() == s2.length()) {
					return s1.compareTo(s2);
				}else {
					return s1.length() - s2.length();
				}
			}
		});
		
		System.out.println(word[0]);
		
		for(int i = 1; i< N; i++) {
			if(!word[i].equals(word[i-1]))
				System.out.println(word[i]);
		}
	}

}

 

간단히 설명을 해보자면 ....

 

 

이전 글의 두 번째 방법과 비슷한 방법을 차용했다!!!!

 

바로 기존의 것을 사용하는 것!!!!!!!!!!!!!

 

 

 

  • 단어를 String [] 로 받아오기

 

  • Arrays.sort() 함수 사용하기

 

  • 길이가 같을 때만, 사전식으로 단어 비교하기

 

  • 첫 번째 요소 출력해준 후, 이전과 비교해서 중복이 아닌 것만 출력해주기!!

 

 


 

중복 체크는 처음 받을 때부터 해주는 방법도 있다!!!

 


 

 

 

백준 알고리즘

 

채점 결과!!!

 

 

 

다행히 맞았습니다!!

 

 

백준 알고리즘 1181번 채점 결과

 

 

 

 

 


스터디를 하며 얻은 것들

  • 입력받을 때부터 중복 확인 가능!!
  • 중복 확인 시에 'i!=0' 조건을 넣는 방법도 있다
  • c/c++에서 string의 size보다는 length를 사용하는 것이 더 정확하다
  • python에서 set을 사용하면 처음부터 중복 없이 받아올 수 있다!!