본문 바로가기
Coding Test/Java Coding Test

[프로그래머스 / 자바] - 커피 심부름

by nam_ji 2024. 7. 25.

커피 심부름

문제

  • 문자열 배열 order가 매개변수로 주어집니다.
  • 아메리카노와 카페 라떼만 판매하는 카페에서 팀원들의 커피를 사려고 합니다.
  • 아메리카노와 라떼의 가격은 찬 것과 뜨거운 것 상관없이 각각 4500, 5000원입니다.
  • 팀원의 메뉴를 수집했을 때, 메뉴만 적은 팀원은 차가운 것으로 통일하고
  • 아무거나를 적은 팀원은 차가운 아메리카노로 통일합니다.
  • 메뉴가 문자열 배열 order로 주어질 떄,
  • 카페에 결제될 금액을 출력하는 문제입니다.
  • order의 원소는 아래의 것들만 들어오고, 각각의 의미는 다음과 같습니다.
  • order의 원소와 의미 예
    • order 원소 의미
      " iceamericano ", " americanoice " 차가운 아메리카노
      "hotamericano", "americanohot" 따뜻한 아메리카노
      "icecafelatte", "cafelatteice" 차가운 카페 라테
      "hotcafelatte", "cafelattehot" 따뜻한 카페 라테
      "americano" 아메리카노
      "cafelatte" 카페 라테
      "anything" 아무거나
  • 입출력 예
    • order result
      ["cafelatte", "americanoice", "hotcafelatte", "anything"] 19000
      ["americanoice", "americano", "iceamericano"] 13500


테스트 (인텔리제이)

  • 가격이 차가운 것과 뜨거운 것은 의미가 없고 아메리카노인지 카페라떼인지 구분하는 문제입니다.
  • 다만 iceamericano, americanoice 이렇게 문자열의 순서가 다를 수 있기 때문에 어떻게 문자열 전체를 비교하는 것이 아닌 지정 문자열이 포함되어 있는지 체크하는 방법을 선택했습니다.
  • 또한 아무거나를 작성한 팀원은 차가운 아메리카노로 주문한다는 조건이 있어 cafelatte 문자열을 비교하기로 했습니다.
  • for문을 이용하여 order의 크기만큼 순회하도록 하고
  • if문으로 order의 원소들을 contains 메서드를 이용하여 문자열 cafelatte와 비교하도록 합니다.
  • 해당 조건이 true면 answer에 5000원을 더하고 아니라면 4500원을 더하도록 하여 문제를 해결했습니다.
  • 두 번째 풀이는 for문을 향상 for문으로, 세 번째 풀이는 향상 for문과 if문을 삼항 연산자를 이용한 풀이입니다.
package com.namji.codingtest;

import javax.swing.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class 커피_심부름 {
  public static void main(String[] args) {
    /*
    문자열 배열 order가 매개변수로 주어집니다.
    아메리카노와 카페 라떼만 판매하는 카페에서 팀원들의 커피를 사려고 합니다.
    아메리카노와 라떼의 가격은 찬 것과 뜨거운 것 상관없이 각각 4500, 5000원입니다.
    팀원의 메뉴를 수집했을 때, 메뉴만 적은 팀원은 차가운 것으로 통일하고
    아무거나를 적은 팀원은 차가운 아메리카노로 통일합니다.
    메뉴가 문자열 배열 order로 주어질 떄,
    카페에 결제될 금액을 출력하는 문제입니다.
    order의 원소는 아래의 것들만 들어오고, 각각의 의미는 다음과 같습니다.
    order의 원소	                    의미
    "iceamericano", "americanoice"	차가운 아메리카노
    "hotamericano", "americanohot"	따뜻한 아메리카노
    "icecafelatte", "cafelatteice"	차가운 카페 라테
    "hotcafelatte", "cafelattehot"	따뜻한 카페 라테
    "americano"	                    아메리카노
    "cafelatte"	                    카페 라테
    "anything"	                    아무거나

    입출력 예
    order	                                                    result
    ["cafelatte", "americanoice", "hotcafelatte", "anything"]	19000
    ["americanoice", "americano", "iceamericano"]	            13500

    입출력 설명
    #1
    예제 1번의 입력을 표로 나타내면 다음과 같습니다.
    order[i]	      팀원의 적은 음료	실제 주문 음료
    "cafelatte"	    카페 라테	차가운 카페 라테
    "americanoice"	차가운 아메리카노	차가운 아메리카노
    "hotcafelatte"	따뜻한 카페 라테	따뜻한 카페 라테
    "anything"	    아무거나	차가운 아메리카노
    차가운 아메리카노 2잔,
    차가운 카페 라테 1잔,
    따뜻한 카페 라테 1잔을 주문
    결제 금액은 4500 × 2 + 5000 × 2 = 19000원입니다

    #2
    예제 2번의 입력에서는 모든 음료를 차가운 아메리카노로 시키게 됩니다.
    따라서 결제 금액은 4500 × 3 =  13500원이고 13500을 return 합니다.
     */

    String[] order = {"americanoice", "americano", "iceamericano" };
    int answer = 0;

    for (int i = 0; i < order.length; i++) {
      if (order[i].contains("cafelatte")) {
        answer += 5000;
      } else {
        answer += 4500;
      }
    }
    System.out.println(answer);

//    for (String s : order) {
//      if (s.contains("cafelatte")) {
//        answer += 5000;
//      } else {
//        answer += 4500;
//      }
//    }
//    System.out.println(answer);

//    for (String s : order) {
//      answer += s.contains("cafelatte") ? 5000 : 4500;
//    }
//    System.out.println(answer);
  }
}

프로그래머스 코드

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;
    }
}

// class Solution {
//     public int solution(String[] order) {
//         int answer = 0;  
//         for (String s : order) {
//             if (s.contains("cafelatte")) {
//                 answer += 5000;
//             } else {
//                 answer += 4500;
//             }
//         }       
//         return answer;
//     }
// }

// class Solution {
//     public int solution(String[] order) {
//         int answer = 0;
//         for (String s : order) {
//             answer += s.contains("cafelatte") ? 5000 : 4500;
//         }
//         return answer;
//     }
// }