반응형

🗓️ 문제 설명

  • 고객의 약관 동의를 얻어서 수집된 1 ~ n번으로 분류되는 개인정보 n개가 있습니다.
  • 약관 종류는 여러가지 있으며 각 약관마다 개인정보 보관 유효기간이 정해져 있습니다.
  • 약관의 종류마다 유효기간이 다르며, 유효기간이 지나면 개인정보를 파기해야 합니다.
  • 모든 달이 28일까지 있다고 가정하고, 오늘 날짜가 주어질 때, 파기해야 하는 개인정보의 번호를 반환하세요.
  • 제한 사항
    • today = 'YYYY.MM.DD' 형태
    • 1 ≤ terms의 길이 ≤ 20
    • 약관종류는 A~Z 중 알파벳 대문자 하나이며, 중복 없음
    • 1 ≤ privacies의 길이 ≤ 100
    • privacies[i]는 i+1번 개인정보의 수집 일자와 약관종류를 나타냄
    • terms, privacies의 원소는 '약관종류 유효기간' 형태의 약관종류와 유효기간을 공백 하나로 구분하는 문자열
    • 2000 ≤ YYYY ≤ 2022
    • 1 ≤ MM ≤ 12
    • 1 ≤ DD ≤ 28
    • 파기해야 할 개인정보가 하나 이상 존재하는 입력만 주어짐
  • 입출력 예시
today terms privacies result
"2022.05.19" ["A 6", "B 12", "C 3"] ["2021.05.02 A", "2021.07.01 B", "2022.02.19 C", "2022.02.20 C"] [1, 3]
"2020.01.01" ["Z 3", "D 5"] ["2019.01.01 D", "2019.11.15 Z", "2019.08.02 D", "2019.07.01 D", "2018.12.28 Z"] [1, 4, 5]

 

💻 코드

최종 코드

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 1번줄 : 주어진 날짜를 일수로 변환하는 함수 선언
  2. 2번줄 : "YYYY.MM.DD" 형태의 날짜를 '.'을 기준으로 나누어 year, month, day에 정수(int)로 저장
  3. 3번줄 : year, month, day를 일수로 변환하여 반환
  4. 6번줄 : 주어진 약관정보를 {약관 : 일수} 형태로 저장
  5. 7번줄 : 1에서 선언한 함수를 통해 오늘의 일수를 저장
  6. 8~10번줄 : 개인정보를 인덱스와 값으로 나누어 개인정보의 일수와 약관일수를 더한 값이 오늘 일수보다 작으면 (인덱스+1)을 저장

 

 

반응형
반응형

🗓️ 문제 설명

  • 주어진 board 배열에서 0은 인형이 없음을 나타내며, 0이 아닌 숫자는 인형의 id입니다.
  • 인형을 집기 위해 크레인을 작동시킨 위치가 담긴 배열 moves가 주어집니다.
  • 주어진 board 배열에서 인형(숫자)을 뽑아 바구니에 넣습니다.(뽑힌 인형은 board에서 사라집니다.)
  • 주어진 board 배열에서 같은 인형이 두 번 연속으로 뽑히면 두 인형은 터뜨려지면서 바구니에서 사라집니다.
  • 크레인(moves)를 모두 작동시킨 후 터뜨려져 사라진 인형의 개수를 반환하세요.
  • 제한 사항
    • board 배열은 2차원 배열로 크기 '5 X 5'이상 '30X30'이하입니다.
    • board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다.
    • moves 배열의 크기는 1 이상 1000이하입니다.
    • moves 배열 각 원소들의 값은 1 이상이며, board 배열의 가로 크기 이하인 자연수입니다.
  • 입출력 예시
board moves result
[[0, 0, 0, 0, 0],
[0, 0, 1, 0, 3],
[0, 2, 5, 0, 1],
[4, 2, 4, 4, 2],
[3, 5, 1, 3, 1]]
[1, 5, 3, 5, 1, 2, 1, 4] 4

 

💻 코드

최종 코드

- 수정 사항
 >> 뽑힌 인형을 board에서 제거
 >> 불필요한 부분을 제거

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

 

 

⚙️ 시행착오

1차 시도

더보기

- 입출력 테스트 실패
- 반복문 연속 시행으로 기댓값보다 출력값이 크게 나옴

 

2차 시도

더보기

- 두번째 반복문 이후 break 추가
- 입출력 테스트 실패
- 뽑아준 인형을 board에서 제거하지 않음

 

알게된 점

더보기

- 스택 자료구조의 구조 : 후입선출

반응형
반응형

🗓️ 문제 설명

  • 자카드 유사도는 집합 간의 유사도를 검사하는 방법 중의 하나로 두 집합이 주어지면 자카드 유사도 J(A, B)는 두 집합의 교집합 크기를 두 집합의 합집합 크기로 나눈 값으로 정의됩니다. 
  • 입력으로 들어온 문자열은 두 글자씩 끊어서 다중집합의 원소로 만듭니다.
  • 다중집합의 원소는 영문자로 된 글자 쌍만 유효하고, 기타 공백이나 숫자, 특수 문자가 들어있는 경우는 그 글자 쌍을 버립니다. 
  • 입력으로 들어온 두 문자열의 자카드 유사도를 출력합니다.
    유사도 값은 0에서 1사이의 실수이므로, 이를 다루기 쉽도록 65536을 곱한 후에 소수점 아래를 버리고 정부만 출력합니다.
  • 제한 사항
    • 2 ≤ str1, str2 길이 ≤ 1000
    • 다중집합 원소 사이를 비교할 때, 대문자와 소문자의 차이는 무시합니다. 
  • 입출력 예시
str1 str2 answer
FRANCE french 16384
handshake shake hands 65536
aa1+aa2 AAAA12 43690
E=M*C^2 e=m*c^2 65536

 

💻 코드

최종 코드

 - 수정 사항 
 >> 차집합 구하는 과정 수정

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

- set를 이용한 합집합과 교집합을 구해 원소들의 최소 최대를 통해 자카드 유사도를 구함

풀이 2번

- isalpha()를 이용한 문자열 추출

 

⚙️ 시행착오

1차 시도

더보기

- 정규표현식을 이용해 다중집합을 만드는 과정에서 영문자 외의 문자가 포함

 

2차 시도

더보기

- 수정 사항
 >> 정규표현식에서 두 글자의 영문자만 포함하도록 코드 수정
- 영문자만 포함한 다중집합을 만드는 과정은 성공적으로 진행 
- 합집합과 교집합에 빈리스트가 들어가는 경우가 발생해 자카드 유사도를 구하는 과정에서 zerodivisionerror 발생

 

3차 시도

더보기

- 수정 사항
 >> 다중 합집합이 빈 리스트인지 아닌지를 파악하는 조건문 추가
 >> 합집합을 만드는 과정을 수정(리스트를 더하기→ 반복문을 통한 합집합 생성)
- 테스트 실패나 발생하는 문제가 존재

 

알게된 점

더보기

다중 합집합을 구하는 반복문

 다중 교집합을 구하는 반복문

 

반응형

+ Recent posts