ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 7. 가운데 글자 가져오기
    코딩 테스트/Level 1 2019. 10. 5. 23:00
    반응형

    https://programmers.co.kr/learn/courses/30/lessons/12903

     

    코딩테스트 연습 - 가운데 글자 가져오기

    단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다. 재한사항 s는 길이가 1 이상, 100이하인 스트링입니다. 입출력 예 s ret

    programmers.co.kr

     

    파이썬

    가장 흔한 해법일 겁니다. 

    def solution(s):
        length = len(s)
        center = length // 2
        if length % 2:
            return s[center]
        else:
            return s[center - 1:center + 1]

    꾸역꾸역 밀어 넣으면 한 줄로도 가능합니다만.
    가독성이 좋지 않습니다.
    반복된 // 연산, len(s) 정말 보기 싫군요...
    프로그래머는 반복을 싫어합니다.

    def solution(s):
        return s[len(s) // 2] if len(s) % 2 else s[len(s) // 2 - 1:len(s) // 2 + 1]
    def solution(s):
        return s[len(s) // 2 - (0 if len(s) % 2 else 1) :len(s) // 2 + 1]

    len(s) 반복 말고는 괜찮은 듯 합니다. 코딩 테스트에선 한 줄에 자존심을 걸기 때문에... 

    def solution(s):
        return s[(len(s) - 1) // 2 : len(s) // 2 + 1]

    자바스크립트

    function solution(s) {
        return s.slice((s.length - 1) / 2, s.length / 2 + 1);
    }

    자바

    class Solution {
        public String solution(String s) {
            return s.substring((s.length() - 1)/ 2, s.length() / 2 + 1);
        }
    }

    func solution(s string) string {
    	if len(s)&1 == 1 {
    		return s[len(s)/2 : len(s)/2+1]
    	} else {
    		return s[len(s)/2-1 : len(s)/2+1]
    	}
    }
    func solution(s string) string {
    	return s[(len(s)-1)/2 : len(s)/2+1]
    }

    코틀린

    class Solution {
        fun solution(s: String) = s.slice(((s.length - 1) / 2)..(s.length / 2))
    }

    C#

    public class Solution
    {
        public string solution(string s) => 
            (s.Length % 2 == 1) ? s.Substring(s.Length / 2, 1) : s.Substring(s.Length / 2 - 1, 2);
    }

    RUST

    fn get_middle_chars(input: &str) -> Option<String> {
        let len = input.chars().count();
        if len == 0 {
            return None;
        }
    
        let middle_index = len / 2;
        let mut chars = input.chars();
        let mut middle_chars = String::new();
    
        for _ in 0..(middle_index - (1 - len % 2)) {
            chars.next();
        }
        if len % 2 == 0 {
            middle_chars.push(chars.next()?);
            middle_chars.push(chars.next()?);
        } else {
            middle_chars.push(chars.next()?);
        }
        Some(middle_chars)
    }
    
    fn main() {
        let input_string = "안녕하세요";
        match get_middle_chars(input_string) {
            Some(middle_chars) => println!("Middle characters: {}", middle_chars),
            None => println!("The input string is empty"),
        }
    }
    fn get_middle_chars(input: &str) -> Option<String> {
        let len = input.chars().count();
        if len == 0 {
            return None;
        }
        Some(
            input
                .chars()
                .skip(len / 2 + len % 2 - 1)
                .take(2 - len % 2)
                .collect()
        )
    }
    
    fn main() {
        let input_string = "안녕하세요";
        match get_middle_chars(input_string) {
            Some(middle_chars) => println!("Middle characters: {}", middle_chars),
            None => println!("The input string is empty"),
        }
    }

     

    반응형
Designed by Tistory.