20240116_커피 심부름(프로그래머스)

2024. 1. 16. 23:37IT/TIL

오늘의 TIL은 프로그래머스에서 코딩 기초 트레이닝에 있는 문제인 커피 심부름이다.

 

문제링크 

 

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

 

프로그래머스

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

programmers.co.kr

 

 

문제의 설명만 보면 어려워 보이는 문제이다.

 

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