본문 바로가기

프로그래밍/코딩테스트

[프로그래머스] lv.0 조건 문자열

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

 

프로그래머스

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

programmers.co.kr

 

문자열에 따라 입력 받은 두수의 크기를 비교하는 프로그램이다.

두 숫자를 n,m 이라고 한다면 문자열 ineq,eq가 주어지는데 ineq는 < 와 >중 하나이고 eq는 = 와 ! 중 하나이다.

그리고 n과 m ineq와 eq의 조건에 맞으면 1을 아니면 0을 return하는 프로그램을 작성하는것이다.

 

나의 문제풀이는 아래와 같다.

if와 else if를 사용하여 제약조건들을 걸었고 equals() 함수를 통하여 String 형태의 문자열을 비교하였다. 문자열같은 경우에는 == 연산자를 사용하게 되면 두개의 대상의 주소값을 비교하게되고 String클래스의 equlas()는 비교하고자 하는 두개의 대상의 값 자체를 비교하기때문에 String타입을 사용할때는 서로의 주소값이 달라서 화면에서 봤을때는 같은 문자열이더라도 주소값이 다르기떄문에 컴퓨터는 내가 원하는 비교를 하지않게된다. 

class Solution {
    public int solution(String ineq, String eq, int n, int m) {
        int answer = 0;

       if(ineq.equals(">")  && eq.equals("=") ){
           answer = n >= m ? 1 : 0;
       }else if (ineq.equals("<") && eq.equals("=")){
           answer = n <= m ? 1 : 0;
       }else if (ineq.equals(">") && eq.equals("!")){
           answer = n > m ? 1 : 0;
       }else if (ineq.equals("<") && eq.equals("!")){
           answer = n < m ? 1 : 0;
       }
        return answer;
    }
}

 

 

equals 관련 참조 링크 :

https://www.w3schools.com/java/ref_string_equals.asp

 

Java String equals() Method

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

https://coding-factory.tistory.com/536

 

[Java] 문자열 비교하기 == , equals() 의 차이점

Java에서 int와 boolean과 같은 일반적인 데이터 타입의 비교는 ==이라는 연산자를 사용하여 비교합니다. 하지만 String처럼 Class의 값을 비교할때는 ==이 아닌 equals()라는 메소드를 사용하여 비교를 합

coding-factory.tistory.com

 

 

다른분의 문제풀이

Map 자료형을 가져와서 사용하시고 BiFunction 인터페이스를 value로 가져와서 맵을 초기화하였고

이 Map 객체인 functions는 ineq와 eq를 결합한 >=, <= ,>! , <! 에 대한 비교함수를 제공하는 기능으로 작성하셨다.

Key = ineq,eq결합 된 스트링객체를 적어두고 , value에는 Integer자료형 (a,b) 를 가지고 a와 b 의 비교함수를 실행하는 방식이다.

 

그리고 return 에 삼항연산자를 사용하여 ineq,eq, n , m 객체들을 활용하여 true일 경우 1 false 일경우에는 0 을 반환하는 방법으로 프로그램을 작성하였다. 

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;
    }
}

 

Bifunction에 대한 참고 

인터페이스인 Bifunction 이며 java 1.8버전부터 도입되었다고 한다. 

사용법으로는 두개의 매개변수를 전달받아 특정작업을 수행후 새로운 값을 반환하는데 사용한다고 한다.

 

Bifunction 인터페이스는 세개의 제네릭 타입을 사용하고

Bifunction<T, U, R> T는 첫번째 매개변수 타입, U 는 두번째 매개변수 타입 , R 은 함수 결과의 유형을 나타낸다.

이 인터페이스 내부에는 추성매서드 apply() , 디폴트 메서드 andThen()이 존재한다.

 

apply()메서드는 제네릭 타입인 두개의 매개변수를 전달받아 특정작업을 수행후 값을 반환한다.

andThen()메서드는 실행후 반환결과에 대한 특정작업이 필요한 경우 해당 로직을 andThen()에 전달한다.

매개 변수로 전달되는 함수는 Bifunction이 아닌 Function타입이어야한다 

 

 

https://docs.oracle.com/javase/8/docs/api/java/util/function/BiFunction.html

 

BiFunction (Java Platform SE 8 )

 

docs.oracle.com

https://developer-talk.tistory.com/716

 

[Java]BiFunction 인터페이스 사용 방법

BiFunction 인터페이스 BiFunction Interface는 Java에서 함수형 프로그래밍을 구현하기 위해 Java 버전 1.8부터 도입된 함수형 인터페이스로 두 개의 매개변수를 전달받아 특정 작업을 수행 후 새로운 값을

developer-talk.tistory.com