본문 바로가기
프로그래머스 코딩테스트 문제/Level 1

[프로그래머스] - 이상한 문자 만들기(C#)

by jyppro 2023. 8. 15.

이상한 문자 만들기

오늘은 "이상한 문자 만들기" 문제를 풀어보도록 하겠습니다. 바로 문제를 살펴보겠습니다.

 

문제 설명

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

 

제한 사항

  • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
  • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

 

입출력 예

 

s return
"try hello world" "TrY HeLlo WoRlD"

 

입출력 예 설명

"try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.

 

시작 코드

public class Solution {
    public string solution(string s) {
        string answer = "";
        return answer;
    }
}

 

나의 풀이

public class Solution {
    public string solution(string s) {
        string answer = "";
        int num = 0;
        
        for(int i = 0; i < s.Length; i++)
        {
            answer += num % 2 == 0 ? char.ToUpper(s[i]) : char.ToLower(s[i]);
            num = s[i] == ' ' ? 0 : num += 1;
        }
        return answer;
    }
}

 

코드 분석

string 타입의 문자열 s가 주어지며 코드가 시작됩니다. int형 num을 0으로 초기화하여 선언하고, s의 길이까지 for문을 돌립니다. for문 내부에는 삼항연산자가 두개 존재합니다. 첫번째는 num을 2로 나눈 나머지가 0이면 s[i]를 ToUpper로 대문자로 변환시킨 다음 char타입으로 answer에 더해줍니다. 만약 false 조건이라면 ToLower로 소문자로 바꿔 저장합니다.

다음 삼항연산자를 살펴보면 s[i]가 공백이라면 0, 아니라면 num에 1을 더한 값을 num에 넣어줍니다. 최종적으로 answer값을 리턴하면서 코드는 종료됩니다.

 

풀이 설명

이 문제에서 요구하는 사항은 짝수번째 수는 대문자, 홀수번째 수는 소문자로 만드는 것입니다. 하지만 제한사항에서 어떻게 풀어야 하는지 더 자세하게 말해줍니다. 문자열의 총 인덱스를 기준으로 나누는 것이 아닌 공백을 기준으로 구분하여 인덱스를 구분합니다. 즉 "try hello world"가 있으면 try의 t가 0번째 인덱스, hello의 h가 각 첫번째 인덱스가 됩니다.

코드에서 나온 ToUpper()과 ToLower()는 대문자와 소문자로 변환하는 메서드이고, 문자열을 공백으로 구분한 인덱스를 기준으로 순회하며 한 단어씩 처리하므로, char타입으로 만들어 answer에 하나씩 추가하는 방식으로 만들어 줍니다.

 

<NEXT>

오늘은 "이상한 문자 만들기" 문제를 풀어보았습니다. 다음에는 Summer/Winter Coding(~2018)에 출제되었던 "예산"  문제를 다뤄보도록 하겠습니다. 감사합니다.