hoon's bLog

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

코딩테스트/프로그래머스

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

개발한기발자 2023. 2. 1. 12:53
반응형

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/12917

 

프로그래머스

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

programmers.co.kr


[문제 설명]

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True,

다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다.

단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

예를 들어 s가 "pPoooyY"면 true를 return 하고 "Pyy"라면 false를 return 합니다.

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

[제한 조건]

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

[입출력 예]

s return
"Zbcdefg" "gfedcbZ"

 

[나의 풀이]

import java.util.Arrays;

class Solution {
    public String solution(String s) {
        
        String answer = "";
        String lower = "";
        String upper = "";
        char[] ch = s.toCharArray();
        
        Arrays.sort(ch);
        
        for (int i = 0; i < ch.length; i++) {
            
            if (Character.isLowerCase(ch[i]))
                lower = ch[i] + lower;
            else
                upper = ch[i] + upper;
            
        }
        
        answer = lower + upper;
        return answer;
    }
}

주어진 String 문자열을 toCharArray()를 통해 char형 배열로 바꾸고,

Arrays.sort()로 정렬하면 소문자~대문자로 정렬된다.

그리고 반복문을 이용해 소문자, 대문자를 구별하여 순서대로 붙여주면 완성!

 

[다른 사람들의 풀이]

 import java.util.Arrays;

public class ReverseStr {
    public String reverseStr(String str){
    
        char[] sol = str.toCharArray();

        Arrays.sort(sol);

        return new StringBuilder(new String(sol)).reverse().toString();
    }

    public static void main(String[] args) {
    
        ReverseStr rs = new ReverseStr();
        
        System.out.println( rs.reverseStr("Zbcdefg") );
    }
}

위의 분은 StringBuilder를 이용해서 풀이했다.

위에서 내가 사용한 String 객체끼리 더하는 방법은 메모리 할당과 해제를 발생시키는데,

이렇게 덧셈 연산이 많아지면, 성능이 저하되게 된다.

 

따라서 이렇게 StringBuilder를 이용해 문자열 배열을 각각의 String 객체로 생성하여,

reverse()만 해준다면, 별도의 반복문 없이도 이렇게 간단하게 코드를 짤 수 있다!

~라는걸 배우게 되었다 👍

 

[정리]

개인 피셜 난이도 : ★

사실 이 코드는 예전에 했던 코드이다.

포스팅을 하면서 오랜만에 내 코드를 보니 감회가 새로우면서 동시에, 하찮은 코딩 소스에 부끄러웠다ㅎㅎ

그래도 다른 사람들 코드를 보면서 이렇게 리뷰하고 공부하는 건 늘 새롭고 짜릿하다!

 

언제나 새로운 정보 공유와 잘못된 정보

비판/지적/태클은 환영입니다!

 

끝.

 

참고 : https://onlyfor-me-blog.tistory.com/317

 

[JAVA] StringBuilder란? StringBuilder 사용법

자바에서 문자열하면 String을 대개 많이 떠올리고 사용할 것이다. 그런데 이 문자열이 1개 이상 있어서 이것들을 더해야 한다고 하면 어떤 방법을 쓸 수 있을까? 간단하게는 이 방법을 쓸 수 있을

onlyfor-me-blog.tistory.com

 

728x90
반응형