2021년 4월 3일 토요일

[ Practice Scala ] List합계 (Sum of Odd Elements)

 

문제 ]

배열 요소 중 홀수 값의 합계

Sample Input

3, 2, 4, 6, 5, 7, 8, 0, 1

Sample Output

16

Explanation

Sum of odd elements is 3+5+7+1 = 16



제출 ]

def f(arr:List[Int]):Int = arr.filter(_ % 2 != 0).sum



풀이 ]

filter와 sum 함수를 써서 

num / 2의 나머지값이 0보다 크면 더하는 작업을 수행한다



2021년 4월 1일 목요일

[ Practice Scala ] List선언 - Range (Array Of N Elements)

 

문제 ]

Create an array of  integers, where the value of  is passed as an argument to the pre-filled function in your editor. This challenge uses a custom checker, so you can create any array of  integers. For example, if , you could return , or any other array of equal length.

Note: Code stubs are provided for almost every language in which you must either fill in a blank (i.e., ____) or write your code in the area specified by comments.

Method Signature

Number Of Parameters: 1
Parameters: [n]
Returns: List or Vector

Input Format

A single integer, .

Constraints

  • The members returned by the list/vector/array must be integers.

Output Format

The function must return an array, list, or vector of  integers. Stub code in the editor prints this to stdout as a space, comma, or semicolon-separated list (depending on your submission language).

Note: Your output need not match the Expected Output exactly; the size of your printed list is confirmed by a custom checker, which determines whether or not you passed each test case.

Sample Input 0

10

Sample Output 0

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Sample Input 1

3

Sample Output 1

[1, 2, 3]



제출 ]

object Solution extends App {

    import scala.io.StdIn.readInt


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

        return List.fill(num)(1)

        Or

        return List.range(0,num)

    }

    println(f(readInt))

}



풀이 ]

num = 4


return List.fill(num)(1) : 리스트 선언시 1로 첫번째인자(num) 만큼 채운다.

ex List(1,1,1,1)


return List.range(0,num) : 리스트 선언시 0~num까지의 수로 채운다.

ex List(0,1,2,3)

세번자 인자 추가시 배열의 스텝을 정한다.

List.range(0,10,2) 

ex List(0,2,4,6,8)










2021년 3월 30일 화요일

[ Algorithm Java ] 가장 큰 수 - 정렬

 

문제 ]


0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.


제한 사항

numbers의 길이는 1 이상 100,000 이하입니다.

numbers의 원소는 0 이상 1,000 이하입니다.

정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.


입출력 예

numbers

return

[6, 10, 2]

6210

[3, 30, 34, 5, 9]

9534330




제출 ]


import java.util.Arrays;
import java.util.Comparator;

class Solution {
    public String solution(int[] numbers) {
        String answer = "";
        
        // 숫자를 문자열로 변환
String[] result = new String[numbers.length];
for (int i = 0; i < numbers.length; i++) {
result[i] = String.valueOf(numbers[i]);
}
        
        // 정렬
        Arrays.sort(result, (o1,o2)->(o2 + o1).compareTo(o1 + o2));
        
        // 정렬된 문자 하나로 합치기
for (String a : result) {
answer += a;
}
        
        // 0만 여러개 있는 배열의 경우 하나의 0만 리턴
if (result[0].equals("0")) {
return "0";
}
        
        return answer;
    }
}



풀이 ]


내림차순 : return (o2+o1).compareTo(o1+o2);

오름차순 : return (o1+o2).compareTo(o1+o2);

https://codevang.tistory.com/294

2021년 3월 29일 월요일

[ Practice Scala ] List 조건2 (Filter Positions in a List)


문제 ] 

Input Format

 integers contained in the list, each on a separate line.

Output Format

Output the list with the integers at odd positions removed i.e. the first element, the third element and so on. The relative positions of the remaining even-position elements should be the same as they were in the original array. Each integer will be on a separate line.

NOTE: By odd positions, we mean the first, third, fifth, etc position of the array needs to be filtered out. As per programming language conventions, these might (and they often do) correspond to indices  and so on.

Sample Input

2
5
3
4
6
7
9
8

Sample Output

5
4
7
8


제출 ]

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

    arr.tail.iterator.sliding(1, 2).toList.flatten

    //arr.view.zipWithIndex.filter(_._2 % 2 != 0).map(_._1).force.toList

}



풀이 ]

arr.tail.iterator.sliding(1, 2).toList.flatten

iterator의 함수 sliding을 이용해 리스트의 짝수 인덱스 값을 구분한다.


def 
sliding[B >: A](size: Intstep: Int = 1)GroupedIterator[B]

예시)
// Returns List(ArraySeq(1, 2, 3), ArraySeq(2, 3, 4), ArraySeq(3, 4, 5))
(1 to 5).iterator.sliding(3).toList

// Returns List(ArraySeq(1, 2, 3, 4), ArraySeq(4, 5))
(1 to 5).iterator.sliding(4, 3).toList

// Returns List(ArraySeq(1, 2, 3, 4))
(1 to 5).iterator.sliding(4, 3).withPartial(false).toList

첫번째 인자는 뽑을 갯수, 두번째 인자는 각 인덱스 마다 건널 뛸 값을 말한다.

리턴 값이 Iterator므로 toList로 형변환 후, flatten함수로 하나의 리스트를 만든다.

예시)
val xs = List(
           Set(1, 2, 3),
           Set(1, 2, 3)
         ).flatten
// xs == List(1, 2, 3, 1, 2, 3)

val ys = Set(
           List(1, 2, 3),
           List(3, 2, 1)
         ).flatten
// ys == Set(1, 2, 3)


다른 풀이법으로 는 

arr.view.zipWithIndex.filter(_._2 % 2 != 0).map(_._1).force.toList

가 있다.



2021년 3월 23일 화요일

[ Zeppelin ] Spark Interpreter Permission Error


에러메세지 ] 

org.apache.zeppelin.interpreter.InterpreterException: org.apache.zeppelin.interpreter.InterpreterException: Fail to open SparkInterpreter

...

Caused by: org.apache.zeppelin.interpreter.InterpreterException: Fail to open SparkInterpreter

...

Caused by: java.lang.reflect.InvocationTargetException

...

Caused by: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-x



원인 ]

Zeppelin실행 계정은 root로, 해당 디렉토리에 권한이 없어

/user/hdfs/에 스파크 staging을 생성하지 못해 생긴다.



해결 ]

/user 밑에 root 디렉토리 생성 후 

다시 제플린에서 스파크를 실행시키면 정상적으로 아래와 같은 파일이 생성된다  










(위-에러 / 아래-재실행 ) 






[ Practice Scala ] List 조건 (Filter Array)


문제 ]  

Input Format

The first line contains the delimiter .
The next  lines each contain an integer, which represents the elements of the list/array. You have to read the input to the End-Of-File.

Output Format

Print all the integers from the array that are less than the given upper limit  in value on separate lines. The sequence should be the same as it was in the original array.

Constraints


For any element,  in the array, 

Note

The purpose of this challenge is to learn how to write your own implementation of a filter function. We recommend not using the inbuilt library function.

Sample Input

3
10
9
8
2
7
5
1
3
0

Sample Output

2
1
0


제출 ]

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

    arr.filter(_<delim)

}



풀이 ]

받은 리스트 요소들 중에 인자값 delim보다 작은 것을 리턴하는 문제이다.


def 
filter(p: (A) => Boolean)List[A]

List.filter 함수를 통해 List.filter( x=> delim > x )와 같이 조건을 주어, 

각 요소들 중에 조건에 해당하는 값을 리턴한다. 


추가적으로 List.filter(_<delim).sorted, sorted함수를 추가해 정렬된 반환값을 

리턴할 수 있다.