[프로그래머스-Java] 콜라 문제, 문자열 정렬하기

RedPanda·2025년 4월 17일
0

[알고리즘] Java

목록 보기
17/22

콜라 문제

콜라 빈 병 2개를 가져다주면 콜라 1병을 주는 마트가 있다. 빈 병 20개를 가져다주면 몇 병을 받을 수 있는가?
단, 보유 중인 빈 병이 2개 미만이면, 콜라를 받을 수 없다.

계산 후 나머지가 생기면 다음 계산에 포함하는 식으로 접근하였다.
(현재 가진 병 = 받은 병 + 나머지) 으로 계산하였다. 위의 예시는 이렇게 된다.
(10+0) => (5+0) => (2+1) => (1+1)

class Solution {
    public int solution(int a, int b, int n) {
        int answer = 0;
        
        // 이번에 받는 횟수 = (나머지 + 가진 병) / 줘야하는 수
        // 나머지 = (나머지 + 가진 병) % 줘야하는 수
        // 받은 병의 수 = 이번에 받는 횟수 * 받을 병 수
        // 가진 병의 수 = 나머지 + 받은 병의 수
        
        while(n >= a){
            answer += n / a * b;
            n = n % a + n / a * b;
        }
        
        return answer;
    }
}

사실 주석처럼 생각하고 코드를 짰는데 다짜고 코드를 정리하고 나니 두줄 밖에 안남았다. 깔끔하니 좋았는데 어떤 사람은 한줄에 짰더라...

문자열 내맘대로 정렬하기

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

문자열 배열을 받아와서 정렬을 하는 문제였다.
문제는 문자열의 n번째 문자들을 비교해서 정렬하는 거였는데, 왠지 이전에 공부한 stream을 쓰면 쉽게 풀릴 것 같았다.

import java.util.*;
import java.util.stream.Collectors;

class Solution {
    public String[] solution(String[] strings, int n) {
        List<String> strList = Arrays.asList(strings);	// String[] -> List<String>
             
        List<String> str = strList.stream()
            .map(el1 -> el1.charAt(n) + el1)	// 비교할 문자를 맨 앞에 추가
            .sorted()	// 맨앞 문자로 정렬
            .map(el2 -> el2.substring(1))	// 맨 앞 문자를 떼기
            .collect(Collectors.toList());	// List화
        
        return str.toArray(new String[0]);	// List<String> -> String[]
    }
}

확실히 for문 쓰고 if문 쓰는 것 보다 간결해졌다.
코드 작성이 길어질수록 생각이 복잡해진다는 것을 이번에 확실히 깨달았다.

어려웠던 부분은 오히려 String을 다루는 부분이었는데, substring, charAt 같은 기본적인 메소드는 이제 외워야할 때가 되지 않았나 싶다...ㅎㅎ

profile
끄적끄적 코딩일기

0개의 댓글