C# - 이모티콘 할인행사

2023. 2. 15. 22:40·프로그래머스

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

 

프로그래머스

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

programmers.co.kr

 

using System;
using System.Linq;

public class Solution {
    public int[] solution(int[,] users, int[] emoticons)
    {
        // 답은 2개만 반환하므로 길이 2
        int[] answer = new int[2] {0, 0};
        // 2차원 배열은 모든 원소를 길이로 반환하므로 2를 나누어주면 이용자 수
        int users_Length = users.Length / 2;

        // 각 이모티콘에 대해 10, 20, 30, 40% 할인 가능 
        // -> 따라서 할인할 수 있는 경우의 수는 4^이모티콘의 수
        int discount_case = (int)Math.Pow(4, emoticons.Length);

        // 각 이모티콘의 할인율을 저장할 배열(모두 10% 할인인 상태로 시작)
        int[] emoticons_discount_rate = Enumerable.Repeat(10, emoticons.Length).ToArray();
        // 루프 시작부터 첫 항목에 10을 더하고 시작하므로 첫 항목만 0
        emoticons_discount_rate[0] = 0;

        // 각 이모티콘의 할인가를 저장할 배열
        int[] emoticons_discounted = new int[emoticons.Length];

        // 모든 할인율 경우의 수만큼 시행
        for (int i = 0; i < discount_case; i++)
        {
            // 1) 할인율 변경
            emoticons_discount_rate[0] += 10;
            for (int j = 0; j < emoticons_discount_rate.Length; j++)
            {
                // 40% 할인까지만 있으므로 50% 할인이 되면
                if (emoticons_discount_rate[j] > 40)
                {
                    // 해당 이모티콘 할인율을 10%로 초기화하고
                    emoticons_discount_rate[j] = 10;
                    //다음 항목 할인율을 10% 높임 
                    emoticons_discount_rate[j + 1] += 10;
                }
                // 할인율이 50%가 되지 않는 항목이 처음 나왔을 때 루프를 종료
                else
                    break;
            }

            // 2) 변경된 할인율에 맞게 할인가 산출
            for (int j = 0; j < emoticons.Length; j++)
            {
                // 가격은 100 단위로 올라가므로 할인율을 적용하더라도 정수
                emoticons_discounted[j] = (int)(((double)(100 - emoticons_discount_rate[j]) * emoticons[j] / 100));
            }

            // 3) 이모티콘 플러스 가입 유저수, 이모티콘 매출 합을 산출
            int emoticon_plus_join = 0;
            int emoticon_sell_price = 0;
            // 각 유저에 대해
            for (int j = 0; j < users_Length; j++)
            {
                // 해당 유저가 구매할 이모티콘 가격 합산용 변수
                int cart_price = 0;
                // 각 항목 할인율과 비교
                for (int k = 0; k < emoticons_discount_rate.Length; k++)
                {
                    // 해당 이모티콘의 할인율이 구매 할인율 이상이면
                    if (users[j, 0] <= emoticons_discount_rate[k])
                        // 할인가를 카트에 추가
                        cart_price += emoticons_discounted[k];
                }
                // 구입할 이모티콘의 가격의 합이 유저가 구매 의사가 있는 가격 미만이면
                if (users[j, 1] > cart_price)
                    // 해당 유저는 이모티콘 구매 -> 구매 가격을 가산
                    emoticon_sell_price += cart_price;
                // 구매 의사가 있는 가격 이상이면
                else
                    // 해당 유저는 이모티콘 플러스 가입
                    emoticon_plus_join++;
            }

            // 4) 기존의 해와 비교
            // 이모티콘 플러스 가입 유저가 더 많은 경우
            if (emoticon_plus_join > answer[0])
            {
                // 서비스 가입 유저가 많은 쪽이 답
                answer[0] = emoticon_plus_join;
                answer[1] = emoticon_sell_price;
            }
            // 이모티콘 플러스 가입 유저가 동일한 경우
            else if (emoticon_plus_join == answer[0])
            {
                // 이모티콘 판매가가 높은 쪽이 답
                if(answer[1] < emoticon_sell_price)
                    answer[1] = emoticon_sell_price;
            }
        }
        return answer;
    }
}

'프로그래머스' 카테고리의 다른 글

C# - 타겟 넘버  (0) 2023.03.02
C# - 조이스틱  (0) 2023.02.28
C# - 주식 가격  (0) 2023.02.08
C# - 점 찍기  (0) 2023.02.01
C# - 다리를 지나는 트럭  (0) 2023.01.25
'프로그래머스' 카테고리의 다른 글
  • C# - 타겟 넘버
  • C# - 조이스틱
  • C# - 주식 가격
  • C# - 점 찍기
ybbro
ybbro
대부분의 포스팅은 pc에서 작성되었습니다. 모바일에서 볼 때 설명이 잘리면 데스크탑 모드를 사용해보길 바랍니다.
  • ybbro
    어떻게든 굴리는 게임 공방
    ybbro
  • 전체
    오늘
    어제
    • 전체 N
      • 스파르타코딩클럽_Unity개발과정 N
      • Unity 2D
        • 카드게임
        • 플랫포머 게임
        • 뱀서라이크
      • Unity 3D
        • 닷지
        • 유니티 짱
        • 디펜스 게임
      • Unity 에러 노트
      • 기능 구현 방법 정리
      • 셰이더 그래프
        • 2D
        • 3D
      • 프로그래머스
      • 자료구조
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    세이브
    스파인
    unity
    직렬화
    마스크
    잔상
    64비트
    유니티
    삭제
    유니티 애니메이터 파라미터 초기화
    무료스킨
    룰렛
    UI
    대시
    텍스트매시프로
    sprite mask
    다크모드
    hello
    갤럭시 S24
    앱이 휴대전화와 호환되지 않아 설치되지 않았습니다
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
ybbro
C# - 이모티콘 할인행사
상단으로

티스토리툴바