Graphics Programming

[ALGOSPOT] LECTURE - 함수 합성 본문

Season 1/하스켈

[ALGOSPOT] LECTURE - 함수 합성

minseoklee 2014. 10. 5. 15:24
문제: https://algospot.com/judge/problem/read/LECTURE

짝수 길이의 문자열을 입력받아 -> 두 개씩 자른 다음 -> 사전순 정렬해서 -> 다시 합쳐서 -> 출력하라.
= getLine - pairup - sort - concat - putStrLn

앞의 두 문제(MERCY, ENDIANS)를 풀어봐서 이제 입출력에서는 걸리적거리는 게 없다. 그냥 함수 합성 연산자 (.) 를 이용해서 핵심 코드를 한 줄로 쓰는 멋을 부리고 싶었다. 근데 리스트를 두 개씩 쪼개는 라이브러리 함수를 못 찾아서 실패.. -,- 이것저것 섞으면 그런 함수를 정의할 수도 있을 것 같은데... 일단 문자열을 쪼개주는 pairup이라는 함수를 직접 정의했다. 이제 입력 문자열을 str이라고 하면 합성 함수 (concat . sort . pairup) 는 정렬된 문자열을 반환한다.

import System.IO

import Data.List
import Control.Monad

main = getLine >>= (\ n -> replicateM_ (read n :: Int) solve)
solve = getLine >>= (\ str -> putStrLn $ (concat . sort . pairup) str)
pairup str = sub [] str where
    sub xs [] = xs
    sub xs ys = sub ((2 `take` ys) : xs) (2 `drop` ys)


저 pairup만 없었음 깔끔했을 텐데
Comments