반응형

 

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

 

 

 

** Javascript

 

1) 맨 처음 제출한 풀이는 이랬다. 프로그래머스 접한 지 얼마 안돼서 푼 문제여서 혼자 되게 뿌듯했던 기억이 있다

지금 보면 약간 흑역사지만

 

function solution(s) {
    var [ ...strings ] = s.split(" ");
    var answers = [];
    for (var string of strings) {
        var temp = "";
        for (var i=0; i<string.length; i++) {
            if (i % 2 === 0) {
                temp += string[i].toUpperCase();
            } else {
                temp += string[i].toLowerCase();
            }
        }
        answers.push(temp);
    }
    return answers.join(" ");
}

 

저 ...string 를 내가 왜 했나 모름

 

 

2) 풀이를 짧게 줄여 보기

 

function solution(s) {
    
    return s.split(" ")
        .map((word) => 
             Array.from(word).reduce((acc, curr, index) => 
                acc += (index % 2) ? curr.toLowerCase() : curr.toUpperCase(), "")).join(" ");
}

 

function solution(s) {
    
    return s.split(' ')
    	.map(word => 
        	word.split('').map((char, key) =>
        		key % 2 ? char.toLowerCase() : char.toUpperCase()).join('')).join(' ')
}

 

 

 

 

** Java

 

 

class Solution {
    public String solution(String s) {
        char[] chars = s.toCharArray();
        int count = 0;
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] == ' ') {
                count = 0;
            } else {
                chars[i] = (count++ % 2 == 0) ? Character.toUpperCase(chars[i]) : Character.toLowerCase(chars[i]);    
            }            
        }
        return String.valueOf(chars);
    }
}

 

 

원래는 첫 for 문에서 .split(" ") 두번째 for 문에서 split("") 하여 풀었는데 통과가 되지 않았다.

 

질문에서 보니 " " 가 여러 개 붙어있는 테스트케이스가 있다고 한다.

 

그래서 다른 사람들의 풀이를 보니 " " 를 만난 경우 인덱스를 0으로 돌린 뒤 짝홀을 따지게 하였다.

 

 

그래서 나도 같은 방식으로 풀었다.

 

그리고 string의 경우 문자열.toUpperCase() 을 사용하는데 char 의 경우 Character.toUpperCase(문자열) 을 사용한다는 것을 이번에 알았다.

 

 

 

 

** Python

 

 

일단 열심히 풀어봤다.

 

def solution(s):
    answer = []
    words = s.split(" ")
    for i in range(len(words)):
        word = ''
        for j in range(len(words[i])):
            word += words[i][j].upper() if j % 2 == 0 else words[i][j].lower()
        answer.append(word)
    return ' '.join(answer)

 

 

 

보아 하니 꼭 for i in range(len(words)) 하지 않고 바로 for x in s.split(" ") 이렇게 써도 되나 보다.

아래는 내 풀이와 가장 비슷하게 푼 다른 사람의 풀이다.

 

def toWeirdCase(s):
    res = []
    for x in s.split(' '):
        word = ''
        for i in range(len(x)):
            c = x[i].upper() if i % 2 == 0 else x[i].lower()
            word = word + c
        res.append(word)
    return ' '.join(res)

 

 

추천을 가장 많이 받은 풀이는 테스트가 개편되면서 통과여부가 달라졌다는 말이 있어서 가져오지 않았다.

반응형

+ Recent posts