[KAKAO 2023_LV 1] 개인정보 수집 유효기간

devKyoun·2023년 5월 3일
0
post-thumbnail

문제출처

🔍REQUIRED

입력받는 문자열(날짜)을 LocalDate로 변환하고 여러 연산이 가능 해야 함

  • 해당 특정 패턴을 읽어줌
import java.time.format.DateTimeFormatter;

DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy.MM.dd");
  • DateTimeFormatter를 이용해 문자열을 LocalDate로 변환
import java.time.LocalDate;

LocalDate realToday = LocalDate.parse("2015.04.22", df);
  • 두 날짜(realToday, infoDay) 몇개월(ChronoUnit.MONTHS) 차이
import java.time.temporal.ChronoUnit;

long subMonth = Math.abs(realToday.until(infoDay, ChronoUnit.MONTHS));

입력 받는 정보들을 Split으로 끊어서 읽을 줄 알아야 함

String a = "a b c";
String[] b = a.split(" ");
b is having ["a"], ["b"], ["c"]

💡IDEA

문제에서 terms 이라는 String 배열이 정보로 주어진다.
terms의 형태는 ["A 3", "B 12", "C 9"...] 이렇다.
매번 terms의 정보는 다르고 이는 프로그래머스 측에서 입력을 담당 하기 때문에 이러한 형태 라는 것만 인지.

Split을 통해 정보를 분해하고, 각각에 대한 정보를 Class에 저장 했다.

class termClass{
    private int[] limitMonth;
    private String[] limitCase;
    
    termClass(String[] terms){
        limitCase = new String[terms.length];
        limitMonth = new int[terms.length];
        String[] data;
        for(int i =0; i<terms.length; i++){
            data = terms[i].split(" ");
            limitCase[i] = data[0];
            limitMonth[i] = Integer.parseInt(data[1]);
        }
    }
   (...)

그리고 문제에서 고객들의 개인정보 및 약관들을 넘겨주는 배열 String[] privacies가 있다.

해당 배열에서 고객들의 약관이 무엇인지 알아내고,
그 약관을 terms 배열의 정보와 맞춰서 문제를 해결 하면 된다.
(대부분 HashMap으로 풀기도 하고 논리적으로 그게 맞는 듯 한데 안배워서..)

termClass에 인자로 받은 약관과 동일한 약관의 유효기간을 반환하는 getCaseMonth를 만들었다.

   (...)
   
	int getCaseMonth(String caseData){
        for(int i=0; i<limitCase.length; i++){
            if(limitCase[i].equals(caseData))
                return limitMonth[i];
        }
        //Error (여기선 일어 날 일 없음)
        return -1;
    }
    
   (...)

이제 privacies 배열에 있는 각 고객의 약관 유형(A,B,C...)를 이용해서 그 약관의 유효기간이 몇개월인지 알아 냈다.

설명이 부족했을 수도 있는데, terms배열엔 약관 유형, 약관 유형의 유효기간 정보가 있고 privacies에는 약관 유형의 유효기간 정보는 없고, 약관 유형 정보, 고객들이 등록한 시기만 존재 한다.
그래서 terms와 논리적으로 연결시켜주어서 고객들의 유효기간 정보를 알아내야하는것

 for (int i = 0; i<privacies.length; i++){
            // terms의 어떤 부분에 맞는지
            String [] info =  privacies[i].split(" ");
            //info[0]는 date, info[1]은 약관유형
            
            //연산을 위해 date 일반화
            infoDay = LocalDate.parse(info[0], df);
            //문제에서 today가 언제인지 입력 해줌
            subMonth = Math.abs(realToday.until(infoDay, ChronoUnit.MONTHS));
            
            //등록시기(today)로부터 subMonth 개월이 흐름
            if(subMonth >= myTermClass.getCaseMonth(info[1])){				
            	//유효기간 보다 같거나 이미 지난 경우
                sample[answerSize] = i+1;
                answerSize++;
            }
            
        }

🔔Conclusion

문제를 차근차근 단계적으로 분해해서 볼 줄 알아야 하는 법
그게 포인트다.

그저 글을 시작부터 너무 꼼꼼히 읽어 대면서 개인정보 유효기간? 저 입력받는 것들은 뭐지? 저건 또 뭐야 이런식으로 시작부터 동시에 또 깊게 보면 안되고

1.입력받는 인자가 어떤게 있지?
2.데이터 타입은 어떻지?
3.그럼 입출력 예시를 보자 출력이 이렇게 되네
4.그럼 문제에서는 이러한 조건을 이용해서 출력 하게끔 하겠네
5.이제 글을 읽어보자

식으로 풀어야 한다는 점.

그리고 코드를 짤때 해당 문제를 잘 파악해서 엑기스만 뽑아내어
코드로 표현 할 줄 알아야 한다는 점.

코테에서 중요할듯 하다

profile
Game Developer

0개의 댓글