[Programmers] 두 개 뽑아서 더하기 / 신규 아이디 추천 / 2016년 / 체육복 (python)

yourmean·2021년 1월 29일
1

Algorithm - Programmers

목록 보기
2/13
post-thumbnail

🌴 두 개 뽑아서 더하기

문제 링크

해결 전략

numbers : 길이가 2이상 100이하인 정수 배열. 모든 수는 0이상 100이하

  1. combination으로 가능한 정수 둘 조합 뽑고
  2. 둘의 합을 ans에 append
  3. 중복 제거 후 sort하고 return

Source Code 1

from itertools import combinations
def solution(n):
    ans = []
    for i in list(combinations(n, 2)):
        ans.append(sum(i))
    ans=set(ans)
    return sorted(ans)

Source Code 2

from itertools import combinations

def solution(n):
    ans = set()
    for i in list(combinations(n, 2)):
        ans.add(sum(i))
        
    return sorted(ans)

원래 몇 문제만 기록해두려고 했는데 그냥 다 올리기로 마음이 바뀜
쉬운것도 시간이 조금만 지나면 가물가물해져서 언넝 정리해둬야겠다



🌴 신규 아이디 추천

문제 링크

해결 전략

new_id : 신규 유저가 입력한 아이디
1. 대문자 > 소문자
2. 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)만 남기기
3. 마침표(.)가 2번 이상 > 마침표(.) 하나
4. 마침표(.)가 처음/끝에 위치 > 제거
5. new_id가 빈 문자열이면 "a" 대입
6. 길이가 16 이상 > 16번째 문자부터 모두 제거. 제거 후 조건 4. 확인
7. 길이가 2자 이하 > new_id의 마지막 문자 길이가 3이 될 때까지 반복해서 끝에 붙임


풀어 쓴 Source Code

import re

def solution(new_id):
    ans=re.sub('[^a-z0-9\-_.]', '', new_id.lower())
    ans=re.sub('\.+', '.', ans)
    ans = re.sub('^[.]|[.]$', '', ans)
    ans='a' if len(ans)==0 else ans[:15]
    ans = re.sub('^[.]|[.]$', '', ans)
    ans = ans if len(ans) > 2 else ans + "".join([ans[-1] for i in range(3-len(ans))])
    return ans

나중에 보기 편하려고 단계별로 적어 둠
정규표현식은 볼때마다 새롭ㄷㅏ..★



🌴 체육복

문제 링크

해결 전략

n : 전체 학생의 수
lost : 체육복을 도난당한 학생들의 번호가 담긴 배열
reserve : 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열

  1. res는 체육복 여벌이 있는 학생의 번호를, los는 체육복을 도난당했는데 여벌옷도 없는 학생(=체육복이 없음)의 번호를 담고 있음
  2. 학생 r에게 여벌 체육복이 있을 때, (r-1)또는 (r+1)번째 학생이 체육복이 없으면 빌려 주고
  3. 체육복을 받은 학생의 번호(r-1 or r+1)을 remove
  4. n(전체 학생 수) - 체육복이 없는 학생수 return

Source Code

def solution(n, lost, reserve):
    res= set(reserve) - set(lost)
    los= set(lost) - set(reserve)
    
    for r in res:
        if r-1 in los:
            los.remove(r-1)
        elif r+1 in los:
            los.remove(r+1)
    return n-len(los)


🌴 2016년

문제 링크

해결 전략

a , b : 2016년 a월 b일
요일명 : SUN, MON, TUE, WED, THU, FRI, SAT

  1. day에 문제조건으로 주어진 요일 이름을 월요일-일요일의 순서로 저장
  2. 2016년 a월 b일이므로 date로 변환 후
  3. weekday로 요일 계산 후 day에 매칭시켜 return

Source Code

import datetime
from datetime import date

def solution(a, b):
    day =['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN']
    return day[datetime.date(2016,a,b).weekday()]
profile
𝐼 𝑒𝑖𝑡ℎ𝑒𝑟 𝑤𝑖𝑛 𝑜𝑟 𝑙𝑒𝑎𝑟𝑛 💪🏻

0개의 댓글