본문 바로가기
코딩기초

Java ::: int string으로 변환 쉽게 하기, Map of();

by 우주_미아 2023. 6. 14.

 

Programmers

코딩 기초 트레이닝 Day3 : 더 크게 합치기 

 

문제 설명

연산 ⊕는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환합니다.
예를 들면 다음과 같습니다.12 ⊕ 3 = 1233 ⊕ 12 = 312양의 정수 a와 b가 주어졌을 때, a ⊕ b와 b ⊕ a 중 더 큰 값을 return 하는 solution 함수를 완성해 주세요.
단, a ⊕ b와 b ⊕ a가 같다면 a ⊕ b를 return 합니다.
 

 

이 때 그냥 생각나는 대로 코드를 짜면 이렇게 나온다.

일단 Int를 '+' 나 append를 이용해서 이어붙일 수 없으니까, 

문자열로 바꿔서 ➡️ 이어 붙이고 ➡️대수 비교 하기 위해 다시 숫자로 바꾸고 정답 출력,,, 

 

 

class Solution {
    public int solution(int a, int b) {
        int answer = 0;
        String A = String.valueOf(a)+String.valueOf(b);
        String B = String.valueOf(b)+String.valueOf(a);

        a = Integer.parseInt(A);
        b = Integer.parseInt(B);


        if(a>=b){
            answer = a;
        }else {
            answer = b;
        }

        return answer;
    }
}

 

다른 방법이 없을까? 하고 다른 분들이 올린 걸 보니까 간결하게 짠 코드가 있었다

Java는 문자열 + 숫자에서 숫자를 문자열로 처리하기 때문에 이렇게 복잡하게 짤 필요 없이 간결하게 짜볼 수 있다고 합니다.

실제로도 가끔 Int를 String 변환하는 경우 String.valueOf() 같은거 안 쓰고 그냥 숫자+"" 많이 쓴다고 합니다~!

class Solution {
    public int solution(int a, int b) {
        int answer = 0;
        int aLong = Integer.parseInt(""+a+b);
        int bLong = Integer.parseInt(""+b+a);
        answer = aLong > bLong ? aLong : bLong;

        return answer;
    }
}

 

코딩 기초 트레이닝 Day4: 조건문자열

함수형 프로그래밍 방식 활용하기

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

먼저 주어진 조건과 연산자에 대한 함수들을 맵으로 정의한 후, 입력된 `ineq`와 `eq`를 키로 사용하여 해당하는 함수를 가져온다. 그리고 가져온 함수에 `n`과 `m`을 적용하여 결과를 얻는다. 마지막으로 결과가 참인 경우 1을 반환하고, 그렇지 않은 경우 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;
    }
}


if문으로 4가지 조건을 만들 수도 있겠지만 함수형 프로그래밍 접근방식을 활용하면 저렇게 된다.`BiFunction<Integer, Integer, Boolean>` 인터페이스를 활용하여 두 개의 정수를 입력으로 받아 불리언 값을 반환하는 함수들을 정의한다. 이 함수들은 주어진 연산자와 조건에 따라 다른 동작을 수행하게 된다.

`Map.of()` 메서드를 사용하여 `functions` 맵을 초기화하고, 각 연산자와 조건에 맞는 함수들을 맵의 값으로 설정한다. 그리고 `functions.get(ineq + eq)`를 통해 주어진 연산자와 조건에 해당하는 함수를 가져오면 된다.

이런 함수 맵을 사용하면 if-else 문이나 switch 문을 대체할 수 있으며, 코드를 보다 간결하고 읽기 쉽게 만들 수 있습다. 함수형 프로그래밍의 아이디어와 맵을 사용한 키-값 매핑을 활용한 접근 방식이 이 코드의 아이디어인 것이다.

 

 

`ineq`와 `eq`는 각각 "<", ">", "=", "!" 중 하나의 문자열을 나타내고 있어서 문자열을 어떻게 연산자로 불러올까 고민했다. 처음에는 equals를 사용했는데 두 문자열을 연결하여 하나의 문자열로 만들어 `ineq + eq`로 표현하면 코드가 간결해진다. 예를 들어, `ineq`가 ">"이고 `eq`가 "!"인 경우, `ineq + eq`는 ">!"가 되는거다. 이렇게 하나의 문자열로 연결된 표현을 사용하여 맵에서 함수를 찾으면 끝!