반응형

전체 글 62

프로그래머스 레벨2 - 스킬트리 with Java

문제 설명 선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다. 예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다. 위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다. 선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요. 제한 조건 ..

[Java9 프로그래밍] 17. 입출력 처리하기

입력/출력 스트림 이전에 우리가 배웠던 스트림과는 완전 다른 스트림이다. 지금까진 메모리 내에서 동작되는 내용에 대해서 배웠지만 입출력이라는건 메모리 외부와 통신하는 것이다. 대표적인건 파일시스템, 네트워크로 통하는 소켓 이런것들을 다루는 과정이 입출력이다. 메모리 외부의 것들을 메모리로 옮기는 것, 메모리 안의 것을 메모리 밖으로 옮기는 것을 스트림이란 개념으로 전부 추상화를 시켜놨다. 데이터를 읽고 쓸 때는 스트림을 이용한다. 입력 스트림 : 바이트(데이터)의 출발지(source) 출력 스트림 : 바이트(데이터)의 도착지 데이터는 바이너리와 텍스트로 구분 (자바에선 UTF-16을 바이너리 데이터로 쓰고, 텍스트를 다루는 입력 데이터는 reader 클래스, 출력 데이터는 writer 클래스) 주로 파일..

Programming/Java 2020.03.30

[Java9 프로그래밍] 16. 스트림 활용과 Optional

스트림(Stream)이란? filter(중간연산) : predicate를 인자로 받아서 true인 요소만을 반환 스트림 API의 활용 - 필터링/슬라이싱 distinct(중간 연산) : 유일한 값을 반환한다. limit (중간 연산) : 지정된 숫자만큼 반환한다. => 처음 3개까지만 뽑아서 새로운 스트림 만들어라. => 최종 연산에는 우리가 사용할 데이터 타입으로 리턴해준다. 스트림 API의 활용 - 매핑 map (중간 연산) : 스트림의 T 객체를 U로 변환. 파라미터로 Function를 사용. => map은 기존의 스트림에서 엘레먼트의 수는 그대로 유지하되 엘레먼트의 성격이 달라짐. 그 전엔 Dish라는 스트림이었는데 map 연산을 거치면 map의 파라미터로 들어오는 함수가 각각의 엘레먼트에 어플라..

Programming/Java 2020.03.30

[Java9 프로그래밍] 15. 스트림

스트림이란? 스트림(Stream)의 정의 Java8부터 추가된 컬렉션(배열 포함)의 저장 요소(Element)를 하나씩 참조해서 람다식(함수적-스타일, functional-style)으로 처리할 수 있도록 해주는 반복자 => 기존엔 포문을 돌려서 words라는 String 컬렉션을 처리할 때 반복문을 사용해서 엘레먼트를 하나씩 접근해서 처리했었음. => Stream 방식을 사용하면 word를 스트림으로 바꾼 후 (words.stream()) filter 함수를 적용해 파라미터로 바로 람다식이 들어간다. 필터링한 후 카운트를 해주게 된다. => words의 엘레먼트가 굉장히 많을 경우 parallelStream을 통해 병렬 처리가 가능하다. 병렬 처리는 cpu의 코어를 이야기한다. 컬렉션을 4개로 쪼개서 ..

Programming/Java 2020.03.30

[Java9 프로그래밍] 14. 제네릭과 컬렉션

제네릭 다양한 타입에도 동작하는 메소드와 클래스 작성이 필요할 때가 있음 ArrayList는 임의의 클래스 T를 요소로 저장 - ArrayList의 클래스 : 제네릭 클래스 - T : 타입 파라미터 제네릭의 타입 파라미터(T)는 기본 타입은 지원하지 않음 제네릭 클래스 타입 파라미터를 한 개 이상 받는 클래스 키/값 쌍을 저장하는 클래스 class Entry { private K key; private V value; public Entry(K key, V value) { this.key = key; this.value = value; } public K get Key() { return this.key; } public V getValue() { return this.value; } } 클래스 뒤 안에..

Programming/Java 2020.03.29

[Java9 프로그래밍] 13. 예외 처리

예외 처리를 해주는 상황 : 메소드가 해야 할 일을 수행할 수 없는 상황에 부딪힐 때 예외와 에러는 다르다. 에러는 복구가 불가능하고, 예외는 복구가 가능한 에러다. 예외라는것은 메소드에서 발생하는데, 이 때 에러코드 (001, 002 등)을 반환한다. 자바에서 쓰이는 예외처리 메커니즘은 C++, 파이썬 등의 언어에서도 유사하게 쓰인다. 예외 클래스 계층 구조 우리가 처리하는 대상은 Exception이다. Exception의 종류 RuntimeException (예외처리가 옵션이다) checked exception (반드시 예외처리가 필요) 예외 처리 방식 메소드 내부에서 예외가 발생할 때 처리할 수 있는 두 가지 방식 예외를 직접 처리 (try ~ catch 사용) - try를 사용하여 예외를 직접 잡..

Programming/Java 2020.03.21

[Java9 프로그래밍] 12. 람다 표현식

함수형 인터페이스 Comparator 인터페이스 int compare(T first, T second); // T는 어떠한 타입이 와도 된다는 이야기. Runnable 인터페이스 void run(); // thread에서 많이 사용한다. 사용자 인터페이스 콜백 void handle(ActionEvent e); 함수형 인터페이스란? 추상 메소드 하나만 포함하는 인터페이스 Comparator 인터페이스 예제 Comparator 인터페이스를 구현한 클래스 class LengthComparator implements Comparator { public int compare(String first, String second) { return first.length() - second.length(); } } =>..

Programming/Java 2020.03.21

[Java9 프로그래밍] 11. 인터페이스

인터페이스 선언 서비스 공급자(서버)와 사용자(클라이언트) 간의 계약을 표현하는 메커니즘 인터페이스 구성 필드, member variable 인터페이스에서 정의된 모든 필드는 final static이 생략된 상수로 강주된다. 메소드 추상 메소드 : 반드시 구현 클래스에서 구현 필요 디폴트 메소드 : 구현클래스에서 구현 필요 없음(디폴트로 사용한다는 의미) 정적 메소드 : static 메소드, 객체 없이 바로 호출 가능 => 원래는 추상메소드만 가능했으나 java8에 와서는 디폴트 메소드와 정적 메소드가 추가되고 java9에 와서 private 메소드까지 추가 가능해짐. public interface shoppingService { // fields double TAX_RATE = 0.005; // abs..

Programming/Java 2020.03.21

[Java9 프로그래밍] 10. 상속

상속 - 클래스 확장 기존의 클래스들을 효율적으로 재사용하여 프로그래밍을 하는것이 중요하다. 여러 클래스들을 재사용하는 방안으로는 상속 결합 슈퍼클래스(상속을 주는 부모클래스)와 서브클래스(상속을 받는 자식클래스) Employee 클래스의 몇 가지 기능을 보유하면서 관리자가 어떻게 다른지 명시 extends를 통해 슈퍼클래스를 상속받는다. public class Manager extends Employee { 추가된 필드 추가된 메소드 또는 오버라이딩된 메소드 } => Employee 클래스에 있는 모든 필드와 메소드를 Manager 클래스에 가져온다. 서브 클래스 메소드 정의와 상속 Manager 클래스에 상여금 인스턴스 변수와 메소드 추가 public class Manager extends Emplo..

Programming/Java 2020.03.21

프로그래머스 레벨1 - 실패율

문제 설명 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다. 이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를 완성하라. 실패율은 다음과 같이 정의한다. 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수 전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변..

반응형