본문 바로가기

Haskell

기본적인 필터링

이번 문제는 필터링에 관한 문제이다. 주어진 리스트와 X에 대해서 X보다 작은 값으로 리스트를 필터링한다. 문제 자체는 매우 간단하다.

원문: https://www.hackerrank.com/challenges/fp-filter-array/problem

스텁

문제에서 제공되는 스텁이다.

main :: IO ()
main =  do
  n <- readLn ::  IO Int
  inputData <- getContents
  let numbers = map read . (lines inputData) :: [Int]
  putStrLn . unlines $ (map show . f n) numbers
  
f :: Int -> [Int] -> [Int]

풀이

함수 f를 작성해야 한다. 함수 f는 정수와 정수의 리스트를 받아, 첫 인자보다 작은 정수만으로 필터링된 결과를 리턴한다. 이는 filter 함수 그자체의 사용이다.

f n arr = filter (< n) arr

최종 main 함수를 풀어보면

  1. readLn 함수로 n을 얻는다.
  2. getContents를 이용해서 inputData에 바인딩한다.
  3. inputData를 행별로 쪼개고 정수로 읽어들여서 number로 만든다.
  4. numbers에 대해서 f n을 적용하고 다시 show를 사상해서 텍스트로 만든다.
  5. 이후 unlines를 이용해서 여러 행짜리 문자열로 묶은 후 출력했다.