영드로이드개발자
용이의 개발블로그
영드로이드개발자

블로그 메뉴

  • ⭐️ Home
  • 💻 GitHub
  • ❤️ Instagram
  • 👍 LinkedIn
  • 분류 전체보기 (44)
    • 공지사항 (1)
    • Daily 공부방 (0)
    • 프로그래밍 언어 (8)
      • Java (7)
      • Kotlin (1)
    • 안드로이드(Kotlin) (16)
    • 코딩테스트(Java) (11)
      • 기초 자료구조 (3)
      • 백준 (0)
      • 프로그래머스 1단계 (5)
      • 프로그래머스 2단계 (3)
    • 알고리즘 정리 (5)
    • 주간 목표계획 및 회고 (2)
    • Project (1)
      • Android App - 오마이코인 (1)

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
영드로이드개발자
코딩테스트(Java)/프로그래머스 1단계

[프로그래머스] 개인정보 수집 유효기간 - JAVA

[프로그래머스] 개인정보 수집 유효기간 - JAVA
코딩테스트(Java)/프로그래머스 1단계

[프로그래머스] 개인정보 수집 유효기간 - JAVA

2024. 2. 27. 20:39
반응형

문제

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

 

프로그래머스

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

programmers.co.kr

입출력

 

이 문제는 2023 카카오 겨울 인터십 문제로 프로그래머스 1단계 문제이다.

문자열을 잘 파싱만 하면 어렵지 않게 해결 할 수 있는 문제지만 입력 받는 개인정보 유효한 달 수가 1~100 이라는 점을 잘 생각해서 코드를 짜야 오류를 막을 수 있다.

그 부분과 날짜를 계산하는 부분만 신경쓴다면 크게 어렵지는 않은 문제이다.

 

import java.util.*;


class Solution {


    public static void main(String[] args) {
        String today = "2022.05.19";
        String[] terms = {"A 6", "B 12", "C 3"};
        String[] privacies = {"2021.05.02 A", "2021.07.01 B", "2022.02.19 C", "2022.02.20 C"};
        System.out.println(Arrays.toString(solution(today,terms, privacies)));
    }


    static public int[] solution(String today, String[] terms, String[] privacies) {

        HashMap<String, Integer> map = new HashMap<>();

        ArrayList<Integer> resultArr = new ArrayList<>();

        String[] todayStringArr = today.split("\\.");

        int[] todayIntArr = new int[todayStringArr.length];
        for (int i = 0; i < todayStringArr.length; i++){
            todayIntArr[i] = Integer.parseInt(todayStringArr[i]);
        }

        for (String term : terms) {
            StringTokenizer st = new StringTokenizer(term);
            String agreeElement = st.nextToken();

            int termMonth = Integer.parseInt(st.nextToken());
            int termYear = termMonth / 12;

            termMonth = termMonth % 12;

            int year = todayIntArr[0] - termYear;
            int month = todayIntArr[1] - termMonth;
            int day = todayIntArr[2];

            if (month <= 0) {
                month += 12;
                year -= 1;
            }

            if (day == 28) {
                day = 1;
                month += 1;
                if (month > 12) {
                    month = 1;
                    year += 1;
                }
            } else day += 1;


            String expirationDate = String.format("%04d%02d%02d", year, month, day);
            map.put(agreeElement, Integer.parseInt(expirationDate));

        }

        for (int i = 0; i < privacies.length; i++){
            StringTokenizer st = new StringTokenizer(privacies[i]," ");

            String privacyDate = st.nextToken();
            String termElement = st.nextToken();

            String[] privacyDateArr = privacyDate.split("\\.");
            StringBuilder sb = new StringBuilder();


            for (String x : privacyDateArr){
                sb.append(x);
            }

            int expirationDate = Integer.parseInt(sb.toString());

            if (map.containsKey(termElement) && map.get(termElement) > expirationDate) {
                resultArr.add(i+1);
            }
        }


        Collections.sort(resultArr);

        int[] answer = new int[resultArr.size()];

        for(int i = 0; i < answer.length; i++){
            answer[i] = resultArr.get(i);
        }

        return answer;
    }
}

느낀점

해당 문제 같은 경우는 딱히 어려운 부분은 없었지만 입력받을 수 있는 날짜의 범위가 1~100 으로 생각하지 않고 1~12인줄 착각하여 왜 이게 아니지? 하고 시간을 오래 써먹어버렸다.. 입력받을 수 있는 값 등 문제를 잘 읽는 버릇을 길러야 겠다...

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

'코딩테스트(Java) > 프로그래머스 1단계' 카테고리의 다른 글

[프로그래머스] 크레인 인형뽑기 게임 - JAVA  (0) 2024.02.28
[프로그래머스] 달리기 경주 - JAVA  (0) 2024.02.27
[프로그래머스] 공원 산책 - JAVA  (1) 2024.02.27
[프로그래머스] 가장 많이 받은 선물 - JAVA  (2) 2024.02.27
  • 문제
  • 입출력
  • 느낀점
'코딩테스트(Java)/프로그래머스 1단계' 카테고리의 다른 글
  • [프로그래머스] 크레인 인형뽑기 게임 - JAVA
  • [프로그래머스] 달리기 경주 - JAVA
  • [프로그래머스] 공원 산책 - JAVA
  • [프로그래머스] 가장 많이 받은 선물 - JAVA
영드로이드개발자
영드로이드개발자
도전을 즐기는 안드로이드 개발자 현영우의 개발 Blog

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.