Light Blue Pointer
본문 바로가기
Coding Test

[프로그래머스]문자열 내림차순으로 배치하기

by Greedy 2023. 11. 20.

문제 주소

https://school.programmers.co.kr/learn/courses/30/lessons/12917

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명 

문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.

s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

제한 사항

  • str은 길이 1 이상인 문자열입니다.

입출력 예

s return

"Zbcdefg" "gfedcbZ"

풀이 과정

⭐Java String to char Array

char[] chars = str.toCharArray();

⭐Java char array to String

String string = new String(charArray);
import java.util.Arrays;
class Solution {
    public String solution(String s) {
        char [] c = s.toCharArray();
        Arrays.sort(c);
        return new String(c);
    }
}

테스트 1

입력값 〉 "Zbcdefg"
기댓값 〉 "gfedcbZ"
실행 결과 〉 실행한 결괏값 "Zbcdefg"이 기댓값 "gfedcbZ"과 다릅니다.

sort가 안먹혔나본데?

찾아보니 이런게 있음

import java.util.*;
class Solution {
  public String solution(String s) {
      String answer = "";
      char[] temp = s.toCharArray();
      int[] intTemp = new int[temp.length];
      for(int i =0; i<temp.length; i++){
          intTemp[i]=(int)temp[i];
      }
      Arrays.sort(intTemp);
      for(int i =0; i<intTemp.length; i++){
          temp[intTemp.length-1-i]= (char)intTemp[i];
      }
      answer = new String(temp);
      return answer;
  }
}

⭐Java arrays.sort revers Order

Arrays.sort(arr, Collections.reverseOrder());
import java.util.Arrays;
import java.util.Collections;
class Solution {
    public String solution(String s) {
        char [] charArr = s.toCharArray();
        int [] intArr = new int[charArr.length];
        for(int i=0; i<charArr.length;i++){
            intArr[i] = (int)charArr[i];
        }
        Arrays.sort(intArr,Collections.reverseOrder());
        for(int i=0; i<charArr.length;i++){
            charArr[i] = (char)intArr[i];
        }
        return new String(charArr);
    }
}

이렇게 함

그리고 Collections 를 쓰고싶으면 Integer를 써야한다는 사실을 알게됨

/Solution.java:10: error: no suitable method found for sort(int[],Comparator<Object>)

Arrays.sort(intArr,Collections.reverseOrder());

// Java program to Sort a Subarray in Descending order
// Using Arrays.sort()
 
// Importing Collections class and arrays classes
// from java.util package
import java.util.Arrays;
import java.util.Collections;
 
// Main class
public class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
        // Note that we have Integer here instead of
        // int[] as Collections.reverseOrder doesn't
        // work for primitive types.
        Integer[] arr = { 13, 7, 6, 45, 21, 9, 2, 100 };
 
        // Sorts arr[] in descending order using
        // reverseOrder() method of Collections class
        // in Array.sort() as an argument to it
        Arrays.sort(arr, Collections.reverseOrder());
 
        // Printing the array as generated above
        System.out.println("Modified arr[] : "
                           + Arrays.toString(arr));
    }
}

⭐Java Integer to int

Integer any = (Integer)ht.get("test");
int i = any.intValue();v

제출 코드

import java.util.Arrays;
import java.util.Collections;
class Solution {
    public String solution(String s) {
        char [] charArr = s.toCharArray();
        Integer [] intArr = new Integer[charArr.length];
        for(int i=0; i<charArr.length;i++){
            intArr[i] = (int)charArr[i];
        }
        Arrays.sort(intArr,Collections.reverseOrder());
        String answer = "";
        for(int i=0; i<charArr.length;i++){
            charArr[i] = (char)(intArr[i].intValue());
        }
        return new String(charArr);
    }
}

 

다른 사람의 풀이

import java.util.*;

class Solution {
  public String solution(String s) {

      return s.chars().boxed().sorted(Collections.reverseOrder()).collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append).toString();
  }
}

 

오.. .collect 부터 살짝 이해 안감

나중에 다시 봐야지