loading
본문 바로가기
Coding/Programers

[ Programmers ] 왼쪽 오른쪽 ( java ) 63 / 124

by NeuLyeo 2024. 1. 4.

[ Programmers ] 왼쪽 오른쪽 ( java ) 63 / 124

 

프로그래머스

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

programmers.co.kr

 

 

 

 

📚 Table of Contents

     

     

     

     

    문제 설명

    문자열 리스트 str_list에는 "u", "d", "l", "r" 네 개의 문자열이 여러 개 저장되어 있습니다. str_list에서 "l"과 "r" 중 먼저 나오는 문자열이 "l"이라면 해당 문자열을 기준으로 왼쪽에 있는 문자열들을 순서대로 담은 리스트를, 먼저 나오는 문자열이 "r"이라면 해당 문자열을 기준으로 오른쪽에 있는 문자열들을 순서대로 담은 리스트를 return하도록 solution 함수를 완성해주세요. "l"이나 "r"이 없다면 빈 리스트를 return합니다.

     

     

     

    제한사항

    • 1 ≤ str_list의 길이 ≤ 20
    • str_list는 "u", "d", "l", "r" 네 개의 문자열로 이루어져 있습니다.

     

     

    입출력 예

    str_list result
    ["u", "u", "l", "r"] ["u", "u"]
    ["l"] []

     

     

     

    입출력 예 설명

    입출력 예 #1

    • "r"보다 "l"이 먼저 나왔기 때문에 "l"의 왼쪽에 있는 문자열들을 담은 리스트인 ["u", "u"]를 return합니다.

    입출력 예 #2

    • "l"의 왼쪽에 문자열이 없기 때문에 빈 리스트를 return합니다.

     

     

     

     

    문제 풀이

    코드 설명

    코드의 목적:

    이 코드는 주어진 문자열 배열에서 "l" 또는 "r"을 찾아 해당 원소까지 또는 해당 원소 이후의 모든 원소를 새로운 배열로 반환하는 기능을 가진 알고리즘입니다.

     

    코드의 주요 구조:

    1. 클래스 정의: Solution이라는 이름의 클래스를 정의합니다.
    2. 메서드 정의: solution이라는 이름의 메서드를 정의합니다. 이 메서드는 문자열 배열(str_list)을 인자로 받아 처리합니다.

     

    코드의 주요 알고리즘:

    1. 배열의 각 원소에 대해 반복문을 실행합니다.
    2. 원소가 "l"인 경우, 배열의 시작부터 해당 원소까지의 구간을 새로운 배열로 복사하여 반환합니다.
    3. 원소가 "r"인 경우, 배열의 해당 원소 다음부터 마지막 원소까지의 구간을 새로운 배열로 복사하여 반환합니다.
    4. 배열에 "l" 또는 "r"이 없는 경우, 빈 배열을 반환합니다.

     

    코드의 핵심:

    1. for-each문을 이용하여 배열의 각 원소를 순회합니다.
    2. if문과 equals를 이용하여 원소가 "l" 또는 "r"인 경우를 판단합니다.
    3. Arrays.copyOfRange를 이용하여 원하는 구간을 새로운 배열로 복사합니다.

     

     

     

    풀이

    import java.util.Arrays;
    
    class Solution {
        public String[] solution(String[] str_list) {
            int idx = 0;
    
            // 배열의 각 원소에 대해 반복문을 실행
            for (String s : str_list) {
    
                // 원소가 "l"인 경우, 배열의 시작부터 해당 원소까지의 구간을 새로운 배열로 복사하여 반환
                if (s.equals("l")) {
    
                    return Arrays.copyOfRange(str_list, 0, idx);
    
                // 원소가 "r"인 경우, 배열의 해당 원소 다음부터 마지막 원소까지의 구간을 새로운 배열로 복사하여 반환
                } else if (s.equals("r")) {
    
                    return Arrays.copyOfRange(str_list, idx + 1, str_list.length);
                }
    
                idx ++;
            }
    
            // 배열에 "l" 또는 "r"이 없는 경우, 빈 배열을 반환
            return new String[]{};
        }
    }