CODING TEST/programmers

Day4 - 조건 문자열

iamyuunzo 2025. 7. 11. 11:23

📌 문제 정보

- 문제 이름 : 코딩 기초 테스트 - 조건 문자열

- 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/181934

 

 

📌 문제 요약

핵심 조건: 각 수를 a, b 입력받아 출력하는 코드 작성

- 제한: - 100,000  a, b ≤ 100,000

 

 

📌 내 풀이 및 코드

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

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

//
if (n < m) {
    return 1;
} else {
    return 0;
}

- 원래는 // 아래 코드처럼 풀었는데 코드가 너무 길어져서 삼항 연산자를 썼음.

- 문자열 비교할 때 계속 .equals() 쓰는걸 까먹음. 아무 생각없이 =을 써서 계속 틀림.. (이젠 진짜 외웠)

 

 

 

📌 다른 사람들 풀이

// 1
// 1️⃣ 가능한 조건들을 Map에 키-값으로 저장
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
);
// 2️⃣ 키로 조건 선택해서 함수 실행
return functions.get(ineq + eq).apply(n, m) ? 1 : 0;


// 2
boolean answer = false;
if (ineq.equals(">") && eq.equals("="))
    answer = n >= m;
else if (ineq.equals("<") && eq.equals("="))
    answer = n <= m;
else if (ineq.equals(">") && eq.equals("!"))
    answer = n > m;
else 
    answer = n < m;
return answer ? 1 : 0;

<-- 다른 풀이 요약 -->

- 1 : Map+BiFunction 방식 : 이렇게 풀고 싶었는데 기억이 안났음...

- 2 : boolean & 삼항연산자

버전  핵심  장점  단점
기본 if-else 모든 케이스 직접 분기 직관적 중복 코드 많음
Map + BiFunction 조건을 테이블화 조건 많아져도 유지보수 쉽다 람다/Map 문법 모르면 어려움
boolean 변수 조건문 간결화 return 중복 제거, 깔끔 구조는 기본과 동일

 

 

 

📌 새로 배운 문법

<-- 이번 문제에서 새로 배운 Java 문법 정리 -->

** 자바의 **원시 타입(Primitive Type)**과 **참조 타입(Reference Type) **

1) 원시 타입 (Primitive Type)

  • 자바에서 가장 기본적인 만 저장하는 타입. ➡️ 값 그 자체를 저장함.
  • 대표적인 예: int (정수) / double (실수) / char (문자 1개) / boolean (참/거짓)

2) 참조 타입 (Reference Type)

  • 객체(인스턴스), 배열, 클래스 등은 전부 참조 타입. ➡️ 값 자체가 아니라 **값이 저장된 위치(주소)**를 저장.
  • 대표 예: String / ArrayList / 배열 int[] / 사용자 정의 클래스
// 1. 원시타입 예시
int a = 3;
int b = 3;

if (a == b) {
    // true : a와 b는 값이 같음
}


// 2. 참조타입 예시
String s1 = new String("hi");
String s2 = new String("hi");

(1) 주소 비교
if (s1 == s2) {
    // false : s1, s2는 서로 다른 객체(주소) : 문자열 내용이 같아도 new로 서로 다른 객체를 만들어서 주소가 다름.
}

(2) 타입 값 비교
if (s1.equals(s2)) {
    // true : s1과 s2의 실제 문자열 내용이 같음
}