728x90
반응형

1. 오늘의 학습 문제
문제
https://school.programmers.co.kr/learn/courses/30/lessons/150370#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
import java.util.*; class Solution { public int[] solution(String today, String[] terms, String[] privacies) { ArrayList<Integer> answer=new ArrayList<>(); HashMap<String, Integer> map = new HashMap<>(); for (String term : terms) { //약관 종류: 유효기간(int) 맵 생성, 찾는 복잡도 O(1) String[] arr = term.split(" "); map.put(arr[0], Integer.parseInt(arr[1])); } int cnt=1; int todayInt = Integer.parseInt(today.replace(".", "")); for (String privacy : privacies) { String[] arr = privacy.split(" "); //공백기준 수집일자: 약관 종류 나눔 int plus = map.get(arr[1]); //더할 개월 수 저장 int year= Integer.parseInt(arr[0].substring(0,4)); int month = Integer.parseInt(arr[0].substring(5, 7)); int date= Integer.parseInt(arr[0].substring(8)); String f_date= date==1 ? "28": String.valueOf(date-1); if(f_date.equals("28")){ plus-=1; } String f_month = ( plus + month <= 12) ? String.valueOf(plus + month) : ( (plus + month) % 12 ==0)? "12" :String.valueOf((plus + month) % 12); if(f_month.length()==1){ f_month = "0" + f_month; } if(f_date.length()==1){ f_date = "0" + f_date; } String f_year= (plus + month <= 12) ? String.valueOf(year): ( (plus + month) % 12 ==0)? String.valueOf(year+ (plus + month) / 12 -1): String.valueOf(year+ (plus + month) / 12); int endDate= Integer.parseInt(f_year+f_month+f_date); if(todayInt > endDate ){ answer.add(cnt); } cnt++; System.out.println(todayInt + " " + endDate); } int[] ans = new int[answer.size()]; for (int i = 0; i < ans.length; i++) { ans[i] = answer.get(i); } return ans; } }
내가 작성한 코드, 날짜-달-년도를 거슬러 올라가 각각 계산하여 yyyymmdd형태로 합치고, today와 비교한다.
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; class Solution { public int[] solution(String today, String[] terms, String[] privacies) { List<Integer> answer = new ArrayList<>(); Map<String, Integer> map = new HashMap<>(); // 오늘 날짜를 계산하여 변수에 저장 int checkDate = getDate(today); // 날짜를 계산하기 위해 약관 종류와 기간을 맵에 저장 for (String s : terms) { String[] term = s.split(" "); map.put(term[0], Integer.parseInt(term[1])); } // 개인정보 배열 privacies를 순회하며 처리 완료된 개인정보의 인덱스를 찾아서 리스트에 추가 for (int i = 0; i < privacies.length; i++) { String[] privacy = privacies[i].split(" "); // 처리 완료일 계산(개인정보 처리 시작일 + 처리 기간 * 28일) if (getDate(privacy[0]) + (map.get(privacy[1]) * 28) <= checkDate) { answer.add(i + 1); } } // 리스트를 배열로 변환하여 반환 return answer.stream().mapToInt(i -> i).toArray(); } // 날짜를 입력받아 계산하여 정수값으로 반환하는 메서드 public static int getDate(String date) { String[] arr = date.split("\\."); int year = Integer.parseInt(arr[0]); int month = Integer.parseInt(arr[1]); int day = Integer.parseInt(arr[2]); // 날짜를 연도 * 12 * 28 + 월 * 28 + 일 로 계산하여 반환 return (year * 12 * 28) + (month * 28) + day; } } 출처: https://ittrue.tistory.com/492 [IT is True:티스토리]
더욱 간단한 풀이
#99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #TIL
728x90
반응형
'공부 > 2024 항해99코딩클럽' 카테고리의 다른 글
99클럽 3기 코테 스터디 28일차 TIL /[백준] 1874번 스택 수열 (0) | 2024.08.18 |
---|---|
99클럽 3기 코테 스터디 27일차 TIL /[프로그래머스] 공 이동 시뮬레이션 (0) | 2024.08.17 |
99클럽 3기 코테 스터디 25일차 TIL /[프로그래머스] 순위 자바 (0) | 2024.08.16 |
99클럽 3기 코테 스터디 24일차 TIL /[프로그래머스] 가장 먼 노드 자바 풀이BFS (0) | 2024.08.14 |
99클럽 3기 코테 스터디 23일차 TIL /[LeetCode] 502.IPO 자바 풀이 (0) | 2024.08.13 |