본문 바로가기

Algorithm/Programers - Java

[프로그래머스(Java)] 조건 문자열 / BiFunction, Map.of()

 

Level. 1

 

문제

문자열에 따라 다음과 같이 두 수의 크기를 비교하려고 합니다.

두 수가 n과 m이라면
- ">", "=" : n >= m
- "<", "=" : n <= m
- ">", "!" : n > m
- "<", "!" : n < m

두 문자열 ineq와 eq가 주어집니다. 
ineq는 "<"와 ">"중 하나고, eq는 "="와 "!"중 하나입니다.
그리고 두 정수 n과 m이 주어질 때, n과 m이 ineq와 eq의 조건에 맞으면 1을 아니면 0을 return하도록 solution 함수를 완성해주세요.

* 제한 사항
- 1 ≤ n, m ≤ 100

 

풀이

class Solution {
    public int solution(String ineq, String eq, int n, int m) {
        int answer = 0;
        
        String str = ineq + eq;
        
        if(str.equals(">="))
            return n>=m;
        
        if(str.equals("<="))
            return n<=m;
        
        if(str.equals(">!"))
            return n>m;
        
        if(str.equals("<!"))
            return n<m;
        
        return answer;
    }
}

 

 


다른 풀이

import java.util.Map;
import java.util.function.BiFunction;

class Solution {
    public int solution(String ineq, String eq, int n, int m) {
        Map<String, BiFunction<Integer, Integer, Boolean>> functions = Map.of(
                ">=", (a, b) -> a >= b,
                "<=", (a, b) -> a <= b,
                ">!", (a, b) -> a > b,
                "<!", (a, b) -> a < b
        );

        return functions.get(ineq + eq).apply(n, m) ? 1 : 0;
    }
}

 

 

 

1. BiFunction

BiFunction Interface는 함수형 프로그래밍을 구현하기 위해 Java 버전 1.8부터 도입된 함수형 인터페이스이다.

두 개의 매개변수를 받아 특정 작업을 수행 후 1개의 객체 값을 반환한다.

 

FunctionalInterface

public interface BiFunction<T, U, R> {

  R apply(T t, U u);

  default <V> BiFunction<T, U, V> andThen(Function<? super R, ? extends V> after) {

    Objects.requireNonNull(after);

    return (T t, U u) -> after.apply(apply(t, u));
  }
}

 

  • T , U : 첫 번째 두 번째 매개변수
  • R : 반환 타입

apply()

R apply(T t, U u);

두 개의 매개변수를 전달받아 특정 작업을 수행 후 값을 반환한다.

 

 

- 사용예시

import java.util.function.BiFunction;
 
public class Main {
    public static void main(String args[])
    {
        // BiFunction to add 2 numbers
        BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;
 
        // Implement add using apply()
        System.out.println("Sum = " + add.apply(2, 3));
 
        // BiFunction to multiply 2 numbers
        BiFunction<Integer, Integer, Integer> multiply = (a, b) -> a * b;
 
        // Implement add using apply()
        System.out.println("Product = " + multiply.apply(2, 3));
    }
}

 

 

 

 

2. Map 초기화 - Map.of

- 기존방법

private Map<Integer, String> map = new HashMap<>() {

  {
    put(1, "one");
    put(2, "two");
    put(3, "three");
  }
};

 

-Map.of()

private Map<Integer, String> map = Map.of(
    1, "own",
    2, "two",
    3, "three"
);

Java 9 이상부터 Map.of()를 통해 간결하게 Map을 초기화할 수 있게 되었다. 

 

 


https://school.programmers.co.kr/learn/courses/30/lessons/181934

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

https://www.geeksforgeeks.org/java-bifunction-interface-methods-apply-and-addthen/

 

Java | BiFunction Interface methods - apply() and addThen() - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org