📌 문제 정보
- 문제 이름 : 코딩 기초 테스트 - 조건 문자열
- 문제 링크: 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의 실제 문자열 내용이 같음
}
'CODING TEST > programmers' 카테고리의 다른 글
| Day5 - 주사위 게임 2 (0) | 2025.07.12 |
|---|---|
| Day4 - flag에 따라 다른 값 반환하기 (0) | 2025.07.11 |
| Day4 - 홀짝에 따라 다른 값 반환하기 (0) | 2025.07.11 |
| Day3 - 문자열 곱하기 (0) | 2025.07.10 |
| Day3 - 문자 리스트를 문자열로 변환하기 (0) | 2025.07.10 |
