티스토리 뷰

## 엘리스 자료구조 / 최대값 기계

 

main.py

from maxMachine import maxMachine

def main():

    myMachine = maxMachine()

    '''
    테스트를 위한 코드입니다.
    '''

    n = int(input())
    
    for i in range(n) :
        line = [int(v) for v in input().split()]
        if line[0] == 0 :
            myMachine.addNumber(line[1])
        elif line[0] == 1 :
            myMachine.removeNumber(line[1])
        elif line[0] == 2 :
            print(myMachine.getMax())
            
if __name__ == "__main__":
    main()

 

maxMachine.py

'''
maxMachine 클래스를 완성하세요.
'''
class maxMachine :
    def __init__(self) :
        ## JAVA로 비교하자면 Default 생성자
        self.numbers = []

    def addNumber(self, n) :
        self.numbers.append(n)

    def removeNumber(self, n) :
        self.numbers.remove(n)

    def getMax(self) :
        return max(self.numbers)

 

 

위 코드를 JAVA로 구현한다면 다음과 같다.

 

Main.java

package min_max;
import java.util.Scanner;

public class Main {
    public static void main(String[] args){

        MaxMachine myMachine = new MaxMachine();

        Scanner input = new Scanner(System.in);

        int n = input.nextInt();
        String tmp = input.nextLine();

        for(int i=0 ; i < n ; i++){
            String numberInput = input.nextLine();
            String line[] = numberInput.split(" ");
            
            if(Integer.parseInt(line[0]) == 0) {
               myMachine.addNumber(Integer.parseInt(line[1]));         
            }
            else if(Integer.parseInt(line[0]) == 1){
                myMachine.removerNumber(Integer.parseInt(line[1]));
            }
            else if((Integer.parseInt(line[0]) == 2)){
                System.out.println(myMachine.getMax());
            }
        }

    }
    
}

MaxMachine.java

package min_max;

import java.util.ArrayList;
import java.util.Collections;

public class MaxMachine {

    ArrayList<Integer> numbers = new ArrayList<>();
    
    public void addNumber(int n){
        numbers.add(n);
    }

    public void removerNumber(int n){
        // numbers.remove(n);  // Which is remove 'n' th index array
        numbers.remove(Integer.valueOf(n));  // If you want remove 'Integer' value from list(array), Use this

    }

    public int getMax(){
        Integer max = Collections.max(numbers);
        return max;
    }

}

 

JAVA로 코딩변환하면서 삽질기/느낀점

 

1. Python에서는 List선언시 var = [] 로 끝나는데 Java에서는 ArrayList 클래스를 이용해서 객체생성까지 다 구현해야 한다. 게다가 Python List는 List안에서 자료형식(Integer, Long, String 등) 제약사항이 없는데 Java는 딱 명시가 되어 있어 동적 배열 그 이상 그이하도 아니다. 엄밀이 말하면 파이썬의 List와 Java의 동적 Array는 다른 느낌

2. Java에서 Integer 값 Array를 제거하기 위해 그냥 numbers.remove(n)쓰면 numbers에 있는 n번째 인덱스를 제거하라는 의미로 들려 그 안에 별도의 클래스를 사용해서 구현해야 하는 경험을 하였다.

3. 다시한번 검색을 해봐야 하겠지만 Scanner클래스의 특징이 있는데 next와 nextline메서드때문에 고생했는데 '\n' 때문에 Exception을 일으키는 원인이 된다.

4. if구분 쓸때 String로 입력을 받도록 구현하고 실질적으로는 형변환을 통해 로직처리를 하도록 했는데 이거보다 더 효율적인 방법이 있을련지는....

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함