2021년 3월 21일 일요일

[ Practice Scala ] 리스트 복제 (List Replication)


문제 ]

Given a list, repeat each element in the list  amount of times. The input and output portions will be handled automatically by the grader. You need to write a function with the recommended method signature.

Input Format

The first line contains the integer  where  is the number of times you need to repeat the elements.
The next  lines each contain an integer. These are the  elements in the array.

Output Format

Output each element of the original list  times, each on a separate line. You have to return the list/vector/array of  integers. The relative positions of the values should be the same as the original list provided in the input.

Constraints


Sample Input

3
1
2
3
4

Sample Output

1
1
1
2
2
2
3
3
3
4
4
4

제출 ]

def f(num:Int,arr:List[Int]):List[Int] ={

    return arr.flatMap(e=>List.fill(num)(e))

}



풀이 ] 

List클래스의 함수 flatMap을 이용한다. 비슷한 함수로 map이 있는데 둘간의 차이를 보면


예제)

val f = Seq("apple","banana","orange")

f.map(_.toUpperCase) //결과값 : List(APPLE, BANANA, ORANGE)

f.flatMap(_.toUpperCase) //결과값 List(A,P,P,L,E,B,A,N,A,N,A,.....G,E)


FlatMap 함수

final def flatMap[B](f: (A) => IterableOnce[B])List[B]


Fill 함수

def fill[A](n: Int)(elem: => A)List[A]

계산결과를 포함하는 목록을 n번 생성한다.


결과적으로 arr.flatMap(e=>List.fill(num)(e)) 내용은

arr배열을 flatmap으로 나누고 각 요소를 fill함수를 이용해 num만큼 반복시킨 목록들을 다시 List값으로 리턴시켜, 해당 문제에 원하는 결과값을 도출한다.





Map과 flatMap차이 : https://hamait.tistory.com/606








댓글 없음:

댓글 쓰기