2024. 1. 16. 23:37ㆍIT/TIL
오늘의 TIL은 프로그래머스에서 코딩 기초 트레이닝에 있는 문제인 커피 심부름이다.
문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/181837
문제의 설명만 보면 어려워 보이는 문제이다.
string[] order로 주어지는 메뉴를 보고 얼마의 금액이 나오는지 묻는 문제로
아메리카노는 4500원, 카페라떼는 5000원(차가운 것과 따뜻한 것의 차이는 없음)이고
order의 원소는 아래와 같다.
"iceamericano", "americanoice" -> 차가운 아메리카노
"hotamericano", "americanohot" -> 따뜻한 아메리카노
"icecafelatte", "cafelatteice" -> 차가운 카페라떼
"hotcafelatte", "cafelattehot" -> 따뜻한 카페라떼
"americano" -> 아메리카노
"cafelatte" -> 카페라떼
"anything" -> 아무거나
(아무거나는 아메리카노로 주문한다)
이 문제를 처음 보면 주어진 경우(원소)가 많아서 식이 복잡해질 것 같으나,
string.Contains(string)을 사용하면 간단하게 풀 수 있다.
using System;
public class Solution {
public int solution(string[] order) {
int answer = 0;
for (int i = 0; i < order.Length; i++)
{
if (order[i].Contains(cafelatte)
answer += 5000;
else
answer += 4500;
}
return answer;
}
}
이런 식으로 문제를 푸는 것이 보통의 풀이 방법이지만,
string.Contains(char)로 Contains의 오버로드식이 있다.
이를 이용하여 문제를 풀 수 있는데, cafelatte에 들어가지만 americano나 anything에는 안들어가는 알파벳을 찾으면
'f'가 있으므로, 위의 식을 아래와 같이 수정할 수 있다.
using System;
public class Solution {
public int solution(string[] order) {
int answer = 0;
for (int i = 0; i < order.Length; i++)
{
if (order[i].Contains('f')
answer += 5000;
else
answer += 4500;
}
return answer;
}
}
이를 for문이 아닌 foreach문과 삼항연산자를 사용하면,
using System;
public class Solution {
public int solution(string[] order) {
int answer = 0;
foreach (string choice in order)
{
answer += choice.Contains('f') ? 5000 : 4500;
}
return answer;
}
}
과 같이 수정할 수 있다.
삼항연산자의 좋은 점은 if ~ else ~ 문으로 작성하면 4줄로 작성해야되는 코드가 1줄로 줄어든다는 점인데,
코드가 길어지는 경우에 코드를 좀 더 직관적으로 볼 수 있다는 장점이 있다.
오늘은 알고리즘 코드타카를 진행하다가 기초 트레이닝에 있는 이름이 독특한 문제를 발견하고 풀었는데,
처음에는 복잡해보였지만, Contains와 삼항연산자를 사용하여 문제를 푸니 상당히 만족스러워서 TIL로 작성하게 되었다.
'IT > TIL' 카테고리의 다른 글
20240118_C#에서의 ref, out (0) | 2024.01.18 |
---|---|
20240117_박싱 & 언박싱 (1) | 2024.01.18 |
20240115_기술면접 관련 (0) | 2024.01.15 |
20240112_자료형 Int와 Float (0) | 2024.01.13 |
20240111_이미지에서 타일맵 만들기 (0) | 2024.01.11 |