================================== 풀이 ====================================
C++ 함수 사용
string a[20000];
int n;
bool compare(string a, string b) {
if (a.length() < b.length()) {
return 1;
}
else if ( a.length() > b.length()){
return 0;
}
// 길이가 같은 경우
else {
return a < b; // 사전순으로 비교가 가능
}
}
int main(void) { // 1181번 문제
cin >> n; // n 입력
for (int i = 0; i < n; i++) {
cin >> a[i]; // 단어 입력
}
sort(a, a + n, compare); // a에서 시작, a+n까지 진행
for (int i = 0; i < n; i++) {
if (i > 0 && a[i] == a[i - 1]) {
continue;
}
else {
cout << a[i] << '\n';
}
}
}
힙 정렬
import java.util.Scanner;
public class Main {
static String[] array = new String[20001];
static String tmp;
public static void main(String[] args) {
int n;
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
for(int i = 0; i < n; i++) {
array[i] = sc.next();
for(int j = 0; j < i; j++) { // 중복 문자열일 경우 입력 제외
if(array[i].equals(array[j])) {
i--;
n--;
}
}
}
for(int i = 1; i < n; i++) { // 최초 힙 정렬 수행
int root;
int c = i;
do {
root = (c -1) /2;
if(array[c].length() > array[root].length() || (array[c].length() == array[root].length() && compare(c, root))) {
tmp = array[c];
array[c] = array[root];
array[root] = tmp;
}
c = root;
}
while (c != 0);
}
for(int i = n-1;i >= 0; i--) { // 힙 정렬 수행
tmp = array[i];
array[i] = array[0];
array[0] = tmp;
int c;
int root = 0;
do {
c = root * 2 +1;
if(c < i-1 && (array[c].length() < array[c+1].length()|| (array[c].length() == array[c+1].length() && compare(c+1, c)))) {
c++;
}
if(c < i && (array[c].length() > array[root].length() || (array[c].length() == array[root].length() && compare(c, root)))) {
tmp = array[c];
array[c] = array[root];
array[root] = tmp;
}
root = c;
}while (c < i);
}
for(int i = 0; i < n; i++) {
System.out.println(array[i]);
}
}
static boolean compare(int c, int root) { // 길이가 같을경우 비교
int i = 0;
do {
if(array[c].charAt(i) > array[root].charAt(i)) {
return true;
}
else if(array[c].charAt(i) < array[root].charAt(i)) {
return false;
}
else {
i++;
}
}
while (i < array[c].length() && array[c].length() == array[root].length());
return false;
}
}
코드가 많이 더럽습니다... 하지만 제가 스스로 실패해가며 코딩했습니다..... 제 진심만은 알아주세요.....
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] 백준 10989번 문제_수 정렬 (1) | 2022.02.10 |
---|---|
[알고리즘] 백준 1431번 문제_시리얼 번호 (2) | 2022.02.10 |
[알고리즘] 백준 2751번 문제_1000만개 정렬 (0) | 2022.02.10 |
[알고리즘] 백준 2752번 문제_세수 정렬 (0) | 2022.02.10 |
[알고리즘] 백준 2750번 문제_단순 정렬 (0) | 2022.02.10 |