728x90
반응형
SMALL

전체 글 230

[Python] 카펫

✏️ 문제 문제 파악처음에는 temp_b, temp_y를 두어 이 두 값이 각각 brown, yellow와 같을 때의 width, height를 리턴하는 방향으로 코드를 짰는데 기본 예제부터 시간 초과가 났다.. 그래서 height의 값이 하나하나 올리는데 대신 가로 길이는 세로 길이보다 크거나 같다는 조건이 있으므로 이를 조건문으로 두어 yellow 값이 (width - 2) * (height- 2) 일 때의 가로와 세로 길이를 출력하도록 코드를 짰다.  코드def solution(brown, yellow): total = brown + yellow for height in range(3, total): width = total // height ..

[Python] 영어 끝말잇기

✏️ 문제 문제 파악중복된 단어가 있는 지 확인은 words 배열 내에 해당 단어를 count 했을 때 2 이상인 지로 확인했다. 중복된 단어가 또 나오는 지 확인할 때 단순히 중복된 단어가 있으면 bool 상태만 변경해서 중복된 단어가 또 나왔는 지 확인하는 방향으로 코드를 짰다.근데 bool 타입으로 하면 배열 내에 중복된 단어가 두 개 이상일 때 앞에 중복되었다고 체크한 단어랑 지금 단어가 같은 지 확인이 안됐다.  그래서 중복되면 dup라는 배열에 넣고 뒤에 중복 단어가 나오면 dup 배열에 있는 지 확인했다.dup 배열에 있으면 단어를 중복해서 말한 거고, dup 배열에 없으면 단어를 중복해서 말한 게 아니게 된다.  코드def solution(n, words): index = -1 ..

[Python] 구명보트

✏️ 문제 문제 파악처음엔 배열에 pop()을 해서 len(people)의 값이 0이 될 때 while 반복문을 끝내는 방향으로 짰는데 pop(0) 메소드를 실행하면 0 인덱스 뒤에 있는 요소들이 인덱스를 다시 배정받아야하는데 이때 많은 시간이 소요되어 효율성 테스트 1번에서 시간초과가 떴다. 그래서 배열의 내용을 건들이지 않는 투 포인터 알고리즘으로 풀었따.  코드시간초과 풀이def solution(people, limit): answer = 0 people.sort() while len(people) > 0: # 최소 몸무게 이하 if limit - 39 = (people[0] + people[-1]): people.pop(0) ..

[Python] 점프와 순간 이동

✏️ 문제 문제 파악이 문제는 시간 초과 때문에 시간 좀 썼는데 알고보니 아주 간단하게 풀렸었다..if n % 2 == 1: ~ else: ~if n % 2 == 1: ~ elif n % 2 == 0: ~1번으로 작성해서 시간초과가 떴는데 2번으로 수정하니 바로 해결되었다. 생각보다 else 조건 처리하는 데 시간이 좀 드는 것 같다..  코드def solution(n): ans = 0 while n != 0: if n % 2 == 1: ans += 1 n -= 1 elif n % 2 == 0: n /= 2 return ans

[Python] 가장 많이 받은 선물

✏️ 문제 문제 파악처음엔 준 사람이랑 받은 사람 구분하려고 { "muzi" : ["frodo", "frodo"] ... } 이런 식으로 딕셔너리 쓰려고 했는데준 사람과 받은 사람, 서로 받은 선물의 수를 비교할 때 복잡해질 것 같았다.  생각해보니 friends 배열에 이름이 차례대로 들어오고 굳이 이름으로 구분 안해도 될 것 같아서 friends의 인덱스를 활용해 이차원 배열을 사용해서 서로 받은 선물의 수를 비교했다.  코드def solution(friends, gifts): people = [[0] * len(friends) for _ in range(len(friends))] cnt = {} # 선물 지수 gift = [0] * len(friends) # 받는 선물 수 ..

[Python] 성격 유형 검사하기

✏️ 문제 문제 파악R과 T, C와 F 는 세트(?)이기 때문에 이 세트를 살리기 위해 딕셔너리를 각각 나눠주면서 튜플을 사용했다.그리고 유형이 반대로 들어올 수도 있기 때문에 반대에 해당하는 유형도 배열에 넣어줘서 딕셔너리의 값을 더할 때 인덱스 [0]과 인덱스 [1]로 구분해서 더해주었다.  코드def solution(survey, choices): answer = '' ary = ['R', 'T', 'C', 'F', 'J', 'M', 'A', 'N'] aryC = ['RT', 'TR', 'CF', 'FC', 'JM', 'MJ', 'AN', 'NA'] category = {'R' : 0, 'T' : 0}, {'C' : 0, 'F' : 0}, {'J' : 0, 'M' : 0}, {..

[Python] 신고 결과 받기

✏️ 문제 문제 파악매치하기 힘들 때는 손으로 적어가면서 정리하는 게 훨씬 잘된다! id 딕셔너리에는 { 유저 ID : [유저가 신고한 ID] } 를 주었고 stop 딕셔너리에는 { 유저 ID : 신고당한 횟수 } 를 주어서 신고당한 횟수가 k 이상이면 id 딕셔너리와 매치해서 인덱스 값을 결과 배열에 추가했다.  코드def solution(id_list, report, k): answer = [0] * len(id_list) id = {} stop = {} for i in id_list: id[i] = [] stop[i] = 0 for r in report: s, e = r.split(' ') ..

[Python] 1번 / 동영상 재생기

✏️ 문제 문제 파악조건이 너~~~~~무 많았다........... 그래서 반례를 잘 생각해봐야 하는 문제 내가 정리한 조건은 다음과 같다.오프닝 시작 위치 명령 처리 후 시작 위치 대해초가 59초 이상이면 분 += 1, 초 %= 60초가 0초 이하이면 분 -= 1, 초 += 60분과 초가 00:00 이하이면 분 = 0, 초 = 0비디오 시간보다 크면 분 = 비디오 시작 분, 초 = 비디오 시작 초오프닝 시작 위치  시작 위치 = 오프닝 끝나는 위치그리고 난 분과 초를 처리하는 과정에서 2차원 배열 total에 대해 total[1] = total[0] 이런식으로 값을 주고 total[0]에 대한 값을 건들인 적이 없는데 나중에 출력해보니 total[1]을 바꿀때마다 total[0] 값이 변했었다.아마 복..

[Python] 개인정보 수집 유효기간

✏️ 문제 문제 파악문제 자체가 연도, 월, 일을 가지고 말하는 것이기 때문에 12월이 넘었는지, 28일이 넘었는지 처리를 잘해주어야 한다. ~에 해당하면 ~를 매치해주어야할 때 딕셔너리만큼 편한 것이 없어서 약관 종류와 유효기간을 다룰 때 딕셔너리를 활용해서 풀었다. 이 문제를 풀었다면 더 확장된 문제인 1번 동영상 재생기 문제를 풀어보면 좋을 것 같다! 코드def solution(today, terms, privacies): answer = [] term_dict = {} cur_year, cur_month, cur_day = map(int, today.split('.')) for term in terms: key, value = term.split() ..

[Python] 10번 / 공원

✏️ 문제 문제 파악돗자리를 내림차순으로 제공하지 않기 때문에 내림차순을 한 후 풀어야한다! (아니면 틀림)몇중의 for 반복문을 작성해서 풀었다.. 이것밖에 딱히 생각나는 풀 코드가 없었다..  코드def solution(mats, park): mats.sort(reverse=True) h, w = len(park), len(park[0]) for mat_size in mats: for i in range(h - mat_size + 1): for j in range(w - mat_size + 1): can_place = True for k in range(mat_size): ..

728x90
반응형
LIST