일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 문자열
- Kotlin
- 스프링 컨테이너
- 스프링 빈
- 연습문제
- 고잉버스
- GoingBus
- 명령어
- 리눅스마스터1급
- toCharArray
- 반복문
- map
- 코딩테스트
- 개발자 회고록
- java 백준 1차원 배열
- 카카오
- 코테
- 리눅스마스터 1급 정리
- 월간코드챌린지
- 자바
- JavaScript
- 프로그래머스
- Java
- 백준 java
- 자바스크립트 코딩의 기술
- Memoir
- Linux
- 리눅스마스터 3과목
- 리눅스
- 백준 javascript
- Today
- Total
hoon's bLog
[Java] 프로그래머스 문자열 내림차순으로 배치하기 자바 본문
문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/12917
[문제 설명]
대문자와 소문자가 섞여있는 문자열 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 프로그래머스 정수 내림차순으로 배치하기 자바 (4) | 2023.02.07 |
---|---|
Java 프로그래머스 자연수 뒤집어 배열로 만들기 자바 (2) | 2023.02.06 |
Java 프로그래머스 문자열 내 p와 y의 개수 자바 (0) | 2022.09.14 |
Java 프로그래머스 문자열 내 마음대로 정렬하기 자바 (0) | 2022.08.26 |
[Java] 프로그래머스 두 정수 사이의 합 자바 (0) | 2022.08.11 |