2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

Lv0 C# 프로그래머스 #25 - n보다 커질 때까지 더하기, 공백으로 구분하기 2, 문자열 바꿔서 찾기

2023. 9. 5. 18:07ㆍ프로그래머스 C# 코딩테스트
반응형

76. n보다 커질 때까지 더하기

 

문제 설명

  • 정수 배열 numbers와 정수 n이 매개변수로 주어집니다. numbers의 원소를 앞에서부터 하나씩 더하다가 그 합이 n보다 커지는 순간 이때까지 더했던 원소들의 합을 return 하는 solution 함수를 작성해 주세요.

제한사항

  • 1 ≤ numbers의 길이 ≤ 100 
  • 1 ≤ numbers의 원소 ≤ 100 
  • 0 ≤ n < numbers의 모든 원소의 합

입출력 예시

  • 예제 1번의 numbers를 문제 설명대로 더해가는 과정을 나타내면 다음의 표와 같습니다.

  • 29를 더한 뒤에 sum 값은 139이고 n 값인 123보다 크므로 139를 return 합니다. 
  • 예제 2번의 numbers의 마지막 원소 전까지의 원소를 sum에 더하면 139입니다. 
  • 139는 n 값인 139보다 크지 않고 마지막 원소인 100을 더하면 139보다 커지므로 239를 return 합니다.

풀이

using System;

public class Solution {
    public int solution(int[] numbers, int n) {
        int result = 0;
        foreach(int num in numbers){
            if(result <= n){
                result += num;
            }
        }
        return result;
    }
}

// 합을 저장할 result 선언
// foreach..in 반복문을 이용해서 result가 n보다 작거나 같을 때 numbers의 요소를 더함.

 

77. 공백으로 구분하기 2

 

문제 설명 

  • 단어가 공백 한 개 이상으로 구분되어 있는 문자열 my_string이 매개변수로 주어질 때, my_string에 나온 단어를 앞에서부터 순서대로 담은 문자열 배열을 return 하는 solution 함수를 작성해 주세요.

제한사항 

  • my_string은 영소문자와 공백으로만 이루어져 있습니다. 
  • 1 ≤ my_string의 길이 ≤ 1,000 my_string의 맨 앞과 맨 뒤에도 공백이 있을 수 있습니다. 
  • my_string에는 단어가 하나 이상 존재합니다.

입출력 예시 

  • 예제 1번의 my_string은 " i    love  you"로 공백을 기준으로 단어를 나누면 "i", "love", "you" 3개의 단어가 있습니다. 따라서 ["i", "love", "you"]를 return 합니다.
  • 예제 2번의 my_string은 "    programmers  "로 단어는 "programmers" 하나만 있습니다. 따라서 ["programmers"]를 return 합니다.

풀이

using System;

public class Solution {
    public string[] solution(string my_string) {
       return my_string.Trim().Split(new[]{" "}, StringSplitOptions.RemoveEmptyEntries);
    }
}

// Trim() 메서드를 이용하여, 문자열의 앞 뒤 공백을 제거.
// Split 메서드를 이용, new[]{" "} : 공백 문자를 포함한 문자 배열 생성
// StringSplitOptions.RemoveEmptyEntries : Split메서드의 옵션으로 빈 문자열을 제거하도록 지정.
// 즉, 문자열의 앞뒤 공백을 제거 후 공백 문자 또한 요소로 인정하는 문자열을 생성한 후,
// 빈 문자열을 제거하면 단어만 남는다.

 

78. 문자열 바꿔서 찾기

 

문제 설명 

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

제한사항 

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

입출력 예시 

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

 

풀이

using System;

public class Solution {
    public int solution(string myString, string pat) {
       string result = myString.Replace("A","X").Replace("B","A").Replace("X","B");
        return result.Contains(pat) ? 1 : 0;
    }
}

// 새로운 문자열 result 선언
// Replace 함수를 이용
// A -> X, B -> A, X -> B로 교체하여 저장
// A -> B, B -> A 로 교체할 경우
// Replace 함수가 문자열을 왼쪽에서 오른쪽으로 순차적으로 처리하면서 
// 가장 먼저 찾아진 대상 문자열을 변경하기 때문에 그 이후에 나오는 동일한 대상 문자열은 변경되지
// 않기 때문이다.

// 만약 ABBAA 를 위와 같이 X로 치환하지 않고 A->B B->A 로 할 경우
// ABBAA -> BBBAA -> BAAAA로 변하게 된다.

// A->X B->A X->A
// ABBAA -> XBBXX -> XAAXX -> BAABB

 

  • 정답률 높은 순부터 풀이
  • 매일 3 문항 풀이
반응형