기타/study

코딩 기초 트레이닝 - 프로그래머스(차근차근 시작해 보세요 Day 18)

javaboiii 2025. 1. 16. 08:36

문제 설명

문자열 myString이 주어집니다. myString을 문자 "x"를 기준으로 나눴을 때 나눠진 문자열 각각의 길이를 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.


제한사항
  • 1 ≤ myString의 길이 ≤ 100,000
    • myString은 알파벳 소문자로 이루어진 문자열입니다.

 

입출력 예
myString result
"oxooxoxxox"
[1, 2, 1, 0, 1, 0]
"xabcxdefxghi" [0, 3, 3, 3]

입출력 예 설명

입출력 예 #1

  • "x"를 기준으로 문자열을 나누면 ["o", "oo", "o", "", "o", ""]가 됩니다. 각각의 길이로 배열을 만들면 [1, 2, 1, 0, 1, 0]입니다. 따라서 [1, 2, 1, 0, 1, 0]을 return 합니다.

입출력 예 #2

  • "x"를 기준으로 문자열을 나누면 ["", "abc", "def", "ghi"]가 됩니다. 각각의 길이로 배열을 만들면 [0, 3, 3, 3]입니다. 따라서 [0, 3, 3, 3]을 return 합니다.
class Solution {
    public int[] solution(String myString) {
         String[] parts = myString.split("x");
        
        // "x"가 문자열의 끝에 있을 경우 빈 문자열을 마지막에 추가
        if (myString.endsWith("x")) {
            String[] temp = new String[parts.length + 1];
            System.arraycopy(parts, 0, temp, 0, parts.length);
            temp[parts.length] = "";
            parts = temp;
        }
        
        // 각 부분의 길이를 계산하여 결과 배열에 저장
        int[] answer = new int[parts.length];
        for (int i = 0; i < parts.length; i++) {
            answer[i] = parts[i].length();
        }
        
        return answer;
    }
}

문제 설명

문자열 myString이 주어집니다. "x"를 기준으로 해당 문자열을 잘라내 배열을 만든 후 사전순으로 정렬한 배열을 return 하는 solution 함수를 완성해 주세요.

단, 빈 문자열은 반환할 배열에 넣지 않습니다.


제한사항
  • 1 ≤ myString ≤ 100,000
    • myString은 알파벳 소문자로 이루어진 문자열입니다.

 

입출력 예
myString result
"axbxcxdx"
["a","b","c","d"]
"dxccxbbbxaaaa" ["aaaa","bbb","cc","d"]

입출력 예 설명

입출력 예 #1

  • myString을 "x"를 기준으로 자른 배열은 ["a","b","c","d"]이며, 이 배열은 이미 사전순으로 정렬된 상태입니다. 따라서 해당 배열을 return 합니다.

입출력 예 #2

  • myString을 "x"를 기준으로 자른 배열은 ["d","cc","bbb","aaaa"]이며, 이 배열을 사전순으로 정렬하면 ["aaaa","bbb","cc","d"]입니다. 따라서 해당 배열을 return 합니다.
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;

class Solution {
    public String[] solution(String myString) {
        String[] parts = myString.split("x");
        
        // 빈 문자열을 제외한 유효한 부분만 필터링
        List<String> resultList = new ArrayList<>();
        for (String part : parts) {
            if (!part.isEmpty()) {
                resultList.add(part);
            }
        }
        
        // 사전순으로 정렬
        Collections.sort(resultList);
        
        // 리스트를 배열로 변환하여 반환
        return resultList.toArray(new String[0]);
    }
}

문제 설명

문자열 binomial이 매개변수로 주어집니다. binomial은 "a op b" 형태의 이항식이고 a와 b는 음이 아닌 정수, op는 '+', '-', '*' 중 하나입니다. 주어진 식을 계산한 정수를 return 하는 solution 함수를 작성해 주세요.


제한사항
  • 0 ≤ a, b ≤ 40,000
  • 0을 제외하고 a, b는 0으로 시작하지 않습니다.

 

입출력 예
binomial result
"43 + 12"
55
"0 - 7777" -7777
"40000 * 40000" 1600000000

입출력 예 설명

입출력 예 #1

  • 예제 1번의 binomial은 "43 + 12"로 이 식을 계산한 결과인 43 + 12 = 55를 return 합니다.

입출력 예 #2

  • 예제 2번의 binomial은 "0 - 7777"로 이 식을 계산한 결과인 0 - 7777 = -7777을 return 합니다.

입출력 예 #3

  • 예제 3번의 binomial은 "40000 * 40000"으로 이 식을 계산한 결과인 40000 × 40000 = 1600000000을 return 합니다.
class Solution {
    public int solution(String binomial) {
        String[] parts = binomial.split(" ");
        
        // a, b는 문자열로 들어오므로 정수로 변환
        int a = Integer.parseInt(parts[0]);
        int b = Integer.parseInt(parts[2]);
        String op = parts[1];
        
        // 연산자에 따라 계산 수행
        if (op.equals("+")) {
            return a + b;
        } else if (op.equals("-")) {
            return a - b;
        } else if (op.equals("*")) {
            return a * b;
        }
        
        // 유효한 연산자가 아닐 경우
        return 0;
    }
}

문제 설명

문자 "A"와 "B"로 이루어진 문자열 myString과 pat가 주어집니다. myString의 "A"를 "B"로, "B"를 "A"로 바꾼 문자열의 연속하는 부분 문자열 중 pat이 있으면 1을 아니면 0을 return 하는 solution 함수를 완성하세요.


제한사항
  • 1 ≤ myString의 길이 ≤ 100
  • 1 ≤ pat의 길이 ≤ 10
    • myString과 pat는 문자 "A"와 "B"로만 이루어진 문자열입니다.

 

입출력 예
myString pat result
"ABBAA"
"AABB" 1
"ABAB" "ABAB" 0

입출력 예 설명

입출력 예 #1

  • "ABBAA"에서 "A"와 "B"를 서로 바꾸면 "BAABB"입니다. 여기에는 부분문자열 "AABB"가 있기 때문에 1을 return 합니다.

입출력 예 #2

  • "ABAB"에서 "A"와 "B"를 서로 바꾸면 "BABA"입니다. 여기에는 부분문자열 "BABA"가 없기 때문에 0을 return 합니다.
class Solution {
    public int solution(String myString, String pat) {
       StringBuilder swappedString = new StringBuilder();
        
        for (char c : myString.toCharArray()) {
            if (c == 'A') {
                swappedString.append('B');
            } else if (c == 'B') {
                swappedString.append('A');
            }
        }
        
        // 치환된 문자열에서 pat이 부분 문자열로 존재하는지 확인
        if (swappedString.toString().contains(pat)) {
            return 1;
        } else {
            return 0;
        }
    }
}

문제 설명

'm'과 "rn"이 모양이 비슷하게 생긴 점을 활용해 문자열에 장난을 하려고 합니다. 문자열 rny_string이 주어질 때, rny_string의 모든 'm'을 "rn"으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.


제한사항
  • 1 ≤ rny_string의 길이 ≤ 100
  • rny_string은 영소문자로만 이루어져 있습니다.

 

입출력 예
rny_string result
"masterpiece"
"rnasterpiece"
"programmers" "prograrnrners"
"jerry" "jerry"
"burn" "burn"

입출력 예 설명

입출력 예 #1

  • 예제 1번의 rny_string의 'm'을 "rn"으로 바꾸는 과정을 표로 나타내면 다음과 같습니다.

|rny_string|m|a|s|t|e|r|p|i|e|c|e|

|---------|-|-|-|-|-|-|-|-|-|-|-|

|result|rn|a|s|t|e|r|p|i|e|c|e|

따라서 "rnasterpiece"를 return 합니다.

입출력 예 #2

  • 예제 2번의 rny_string의 'm'을 "rn"으로 바꾸는 과정을 표로 나타내면 다음과 같습니다.

|rny_string|p|r|o|g|r|a|m|m|e|r|s|

|---------|-|-|-|-|-|-|-|-|-|-|-|

|result|p|r|o|g|r|a|rn|rn|e|r|s|

따라서 "prograrnrners"를 return 합니다.

입출력 예 #3

  • 예제 3번의 rny_string에는 'm'이 없습니다. 따라서 rny_string 그대로인 "jerry"를 return 합니다.

입출력 예 #4

  • 예제 4번의 rny_string에는 'm'이 없습니다. 따라서 rny_string 그대로인 "burn"를 return 합니다.
class Solution {
    public String solution(String rny_string) {
       return rny_string.replace("m", "rn");
    }
}