수박수박, 가운데글자, 문자열 내림차순 정렬

DeadWhale·2022년 10월 11일
0

프로그래머스

목록 보기
12/21
post-thumbnail

길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다

class Solution {
    public String solution(int n) {
        
        StringBuffer sb = new StringBuffer();
        boolean flag = true;
        for(int i=0; i<n; i++){
            if(flag){
                sb.append("수");
                flag = false;
            }else{
                sb.append("박");
                flag = true;
            }
        }
        return sb.toString();
    }
}

boolean 변수 하나를 생성해 기차길 처럼 갈림길을 만들고 객체 생성을 줄이기 위해 StringBuffer를 사용했다.



단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

class Solution {
    public String solution(String s) {
        
        String answer = "";
        int cut = (int)(s.length()/2);
        
        if(s.length() %2 ==0 ) answer = s.substring(cut-1,cut+1);
        else                   answer = s.substring(cut,cut+1);
        
        return answer;
    }
}

문자열의 길이를 활용해 해결했다.
나눌경우 Double형으로 인해 형변환시 올림처리 되는데
짝수일 경우 한칸 이전부터 처리하게 했다.
예외 케이스가 있을 줄 알았는데 없어서 의외였다.


문자열

문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

import java.util.*;
import java.util.stream.*;
class Solution {
    public String solution(String s) {
        
        List<String> list = Arrays.stream(s.split("")).collect(Collectors.toList());
        StringBuffer sb = new StringBuffer();
        Collections.sort(list);
        Collections.reverse(list);
        
        for(String ss : list) sb.append(ss);
        
        return sb.toString();
    }
}

원래 컴페어블도 구현하고 싶었지만. 1레벨을 빠르게 주파하고 싶어서 그냥 빠른 방식으로 구현했다.
효율적이진 않은 것 같다 다른 방식이 많을듯.


1레벨을 최대한 빠르게 정리한 다음 2레벨 문제를 풀어봐야겟다
2레벨 부터는 못풀거 같은데 너무 많다.

0개의 댓글