Notice
Recent Posts
Recent Comments
Graphics Programming
[ALGOSPOT] HOTSUMMER - fold, map 활용하기 본문
문제: https://algospot.com/judge/problem/read/HOTSUMMER
문제 수: n
목표치: goal
사용량: a1 a2 a3 a4 a5 a6 a7 a8 a9
a1 + a2 + ... + a9 <= goal 을 만족하는지를 n번 판단하면 된다. 이제 IO 모나드는 익숙해서 굳이 >>= 를 일일이 쓰며 따져볼 필요가 없으니 do 표기를 사용해서 금방 작성했다.
여기서 핵심 코드는 문자열 "a1 a2 a3 a4 a5 a6 a7 a8 a9" 을 getLine으로 입력받았을 때 전부 정수로 변환해서 더하는 것이다.
usageList = "a1 a2 a3 a4 a5 a6 a7 a8 a9" 라고 하면
x = words usageList = ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9"]
y = map read x = [a1, a2, a3, a4, a5, a6, a7, a8, a9]
total = foldr1 (+) y = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9
이걸 한 줄로 압축하면 total = foldr1 (+) (map read $ words usageList) 이 된다. 튜토리얼은 그만 풀어봐도 될 것 같다.
문제 수: n
목표치: goal
사용량: a1 a2 a3 a4 a5 a6 a7 a8 a9
a1 + a2 + ... + a9 <= goal 을 만족하는지를 n번 판단하면 된다. 이제 IO 모나드는 익숙해서 굳이 >>= 를 일일이 쓰며 따져볼 필요가 없으니 do 표기를 사용해서 금방 작성했다.
import Control.Monad
import System.IO
main = do
numProblems_s <- getLine
let numProblem = read numProblems_s :: Int
forM_ [1..numProblems] $ const $ do
goal_s <- getLine
let goal = read goal_s :: Int
usageList <- getLine
let total = foldr1 (+) (map read $ words usageList)
putStrLn (if total <= goal then "YES" else "NO")
여기서 핵심 코드는 문자열 "a1 a2 a3 a4 a5 a6 a7 a8 a9" 을 getLine으로 입력받았을 때 전부 정수로 변환해서 더하는 것이다.
usageList = "a1 a2 a3 a4 a5 a6 a7 a8 a9" 라고 하면
x = words usageList = ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9"]
y = map read x = [a1, a2, a3, a4, a5, a6, a7, a8, a9]
total = foldr1 (+) y = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9
이걸 한 줄로 압축하면 total = foldr1 (+) (map read $ words usageList) 이 된다. 튜토리얼은 그만 풀어봐도 될 것 같다.
Comments