[Java][Programmers] 할인 행사

2025. 3. 12. 20:32·Coding Test/Programmers
728x90
반응형
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


📌 접근 방식

처음에는 전체 상품을 구매할 수 있는 처음의 날이 언제인지 묻는 문제인 줄 알고 계속 그렇게 풀었는데, 알고보니 전체 상품을 구매할 수 있는 날이 총 며칠이냐고 물은거였음…… 하루쥉일 삽질했오요 ㅠ 계속 코드실행은 되는데 제출하면 12번만 맞았음.. 다들 참고하세요 🥲


⛔️ 처음 푼 코드

import java.util.*;
class Solution {
    public int solution(String[] want, int[] number, String[] discount) {
        int answer = 0;
        List<String> list = new ArrayList<>();
        for(int i=0; i<number.length; i++) {
            for(int j=0; j<number[i]; j++) {
                list.add(want[i]);
            }
        }
        int size = list.size();
        if(size > discount.length) {
            return 0;
        }
        boolean flag = false;
        for(int i=0; i<=discount.length - size; i++) {
            List<String> tmp = new ArrayList<>(list);

            for(int j=i; j<size + i; j++) {
                String menu = discount[j];
                if(tmp.contains(menu)) {
                    tmp.remove(tmp.indexOf(menu));
                }
            }
            if(tmp.size()==0) {
                answer = i+1;
                flag = true;
                break;
            } 
        }
        
        if(flag)
            return answer;
        else return 0;
    }
}

⛔️ 현재 코드의 문제점

  1. contains()와 remove()는 O(n) 연산이라, 최대 10만 개에 대해 반복할 경우 시간 초과 가능성이 높음.
  2. List<String> list는 순서를 고려하지 않고 개수만 필요한 상황에 부적절한 자료구조임.
  3. 문제는 정현이가 원하는 제품이 딱 그 수량만큼 10일 동안 할인 목록에 나와야 한다는 조건인데, 현재 코드는 그 조건을 정확하게 검증하지 못함.

PASS CODE

import java.util.*;

class Solution {
    public int solution(String[] want, int[] number, String[] discount) {
        int answer = 0;

        Map<String, Integer> wantMap = new HashMap<>();
        for (int i = 0; i < want.length; i++) {
            wantMap.put(want[i], number[i]);
        }

        for (int i = 0; i <= discount.length - 10; i++) {
            Map<String, Integer> windowMap = new HashMap<>();

            // 10일 간 할인 품목 수집
            for (int j = i; j < i + 10; j++) {
                windowMap.put(discount[j], windowMap.getOrDefault(discount[j], 0) + 1);
            }

            // wantMap과 windowMap 비교
            if (wantMap.equals(windowMap)) {
                answer++;
            }
        }

        return answer;
    }
}

➡️ getOrDefault()

  • discount[j]가 windowMap에 이미 있다면 → 그 값을 가져오고 없다면 → 0을 기본값으로 사용하는 것!

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Coding Test > Programmers' 카테고리의 다른 글

[Java][Programmers] 행렬의 곱셈  (2) 2025.03.13
[Java][Programmers] n^2 배열 자르기  (0) 2025.03.13
[JAVA][Programmers] 괄호 회전하기  (1) 2025.03.12
[JAVA][Programmers] 예상 대진표 ⭐️  (0) 2025.03.12
[JAVA][Programmers] 멀리 뛰기 ⭐️  (0) 2025.03.12
'Coding Test/Programmers' 카테고리의 다른 글
  • [Java][Programmers] 행렬의 곱셈
  • [Java][Programmers] n^2 배열 자르기
  • [JAVA][Programmers] 괄호 회전하기
  • [JAVA][Programmers] 예상 대진표 ⭐️
예롱메롱
예롱메롱
  • 예롱메롱
    예롱이의 개발 블로그
    예롱메롱
  • 전체
    오늘
    어제
    • 전체보기 (274)
      • 프로젝트 (35)
        • Wedle (12)
        • 인스타그램 클론 코딩 (13)
        • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (10)
      • 인프런 Spring 강의 정리 (79)
        • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 .. (7)
        • Spring 핵심 원리 - 기본편 (9)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 (8)
        • 자바 ORM 표준 JPA 프로그래밍 - 기본편 (11)
        • 실전! 스프링 부트와 JPA 활용1 - 웹 애플리.. (6)
        • 실전! 스프링 부트와 JPA 활용2 - API 개.. (5)
        • 실전! 스프링 데이터 JPA (7)
        • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (7)
        • 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 (11)
        • 실전! Querydsl (8)
      • Cloud (3)
      • Spring (6)
        • spring boot (5)
        • 소셜로그인 (1)
      • Docker (2)
      • DevOps (0)
      • Coding Test (114)
        • Programmers (37)
        • Baekjoon (76)
      • KB It's Your Life 6기 (1)
      • CS (18)
        • 알고리즘 (13)
        • 컴퓨터 구조 (1)
        • Operating System (0)
        • Network (0)
        • Database (4)
      • git (1)
      • Language (15)
        • Java (5)
        • C++ (6)
        • Python (4)
    • GITHUB GITHUB
    • INSTAGRAM INSTAGRAM
  • hELLO· Designed By정상우.v4.10.3
예롱메롱
[Java][Programmers] 할인 행사
상단으로

티스토리툴바