목록프로그래머스/1단계 (30)
연습장

1단계는 약 100문제 정도 되었다. 정답률이 높은 문제순으로 진행하였는데 처음에는 0단계 느낌의 문제도 있었고 뒤로 갈수록 확실히 난이도가 점점 어려워 졌다. 단순히 내가 푼 코드를 올리기 보다는 이 문제를 풀기 위해서 어떻게 생각을 했는지 그리고 어떤 방법을 사용해봤는지에 대해서 적어보았다. 문제에 대한 이해 및 논리적 해석이 중요해졌고 특히 시간 초과 라는 시간복잡도가 등장해서 골치아팠다. 이를 해결하기 위해서 문제를 다시 생각해보거나 구글에 검색을 하는 등의 노력이 필요했다. 최적의 효율적인 코드를 짜기보다는 어떻게든 풀기 위한 코드를 짰던거 같아서 조금 안타까웠다. 점수는 다음과 같으며 2단계 까지는 일단 해볼꺼 같다.

정답률이 높은 순서에서 낮은 순서로 해결하던 중에 건너 뛰었던 유일한 문제이다. 정답률에 비해서 뭔가 어려운 느낌이 든다. dartResult 의 입력으로 answer 의 출력이 나오게 된다. 점수 | 보너스 | 옵션 의 1set 으로 총 3set 의 점수를 하나로 한다. 점수는 0~10 까지 보너스는 앞의 점수를 S 1제곱 D 2제곱 T 3제곱 옵션은 *과 # 으로 * : 해당 점수와 그 앞에 점수를 2배로 만든다 # : 해당 점수에 x ( -1 ) dartResult 의 문자열을 3set로 각각 나눈 뒤 점수를 구했다. 굉장히 비효율적인 코드가 나온거같다. def solution(dartResult): answer = 0 num1 = '' num2 = '' num3 = '' # num1 for i i..

friends = [ 친구 ] gifts = [선물을 주는사람 받는사람 , .... ] 1. 두 사람간에 많이 더 많이 준 사람이 선물을 1개 받습니다. 2. 주고받지 않았거나 같다면 -> 선물지수가 큰 사람이 1개 받습니다. -> 선물 지수도 같다면 주고받지않습니다. 다음달에 선물을 가장 많이 받는 친구와 갯수는 ? 뭔말인지 이해가 잘 안간다.. 1. muzi 의 경우 ryan frodo neo 주다 0 2 0 받다 3 1 1 결과 x o x 총 1개를 받는다. 2. ryan 의 경우 muzi frodo neo 주다 3 0 0 받다 0 1 0 결과 o x = --> o 총 2개를 받는다. 3. frodo 의 경우 muzi ryan neo 주다 1 1 0 받다 2 0 0 결과 x o x 총 1개를 받는다..

bandage = [ 시전시간, 초당 회복량, 추가 회복량] 추가회복량이란 시전시간 동안 몬스터에게 공격당하지 않으면 추가로 회복되는량 health : 최대 체력 ( 이 이상 회복 할 수 없음) attacks = [공격시간, 피해량] 몬스터가 공격하는 시간에는 회복 불가능 체력이 0 이하가 되면 회복 불가능 -1 을 리턴 목표 : 마지막 공격을 맞고 남은 피 or 도중에 죽는다면 -1 을 반환 1초단위로 상태를 계속해서 변화해야되나? 현재 체력 / 연속성공 / 진행시간 현재 체력은 : 최대체력 >= 최대체력 + 초당회복량 - 몬스터의 공격 연속 성공 : 몬스터의 공격 하는 시간 간격에 따라 0에서 bandage[0] 까지 변화 진행시간은 1초부터 attacks[-1][0] 초 까지 진행된다. 시간별 행동..

id_list : 회원 목록 report : ["신고자 신고대상", ... ] k : k번 이상 일 경우 정지 result : id_list 에 보내는 메일 메일은 정지 된 대상에 대해서 신고한 사람 , 신고 당한 대상 에게 보내진다. frodo 와 neo 가 신고를 k= 2 번 이상 당했으므로 정지가 되며 정지가 된 대상을 신고한 신고자에게 메일이 1개씩 가게됨. muzi 의 경우 frodo 에 대한 메일 1개와 neo 에 대한 메일 1개 총 2개를 받게된다. frodo 의 경우 neo 에 대한 메일 1개를 받는다. apeach 의 경우 frodo 에 대한 메일 1개를 받는다. neo 의 경우 받지않는다. 본인이 본인을 신고하지 않으며, 같은 대상에 대해서 여러번 신고하더라도 1건으로 처리된다. 1. ..

park : 공원 모양 S : 시작점 O : 이동가능 X : 장애물 routes : ["방향 칸수", ... ] 3번의 예시 O S O O O O O X O O O O 시작점 (0,1) E 2 -> 공원 이탈 -> 불가능 S 3 -> 장애물 -> 불가능 W 1 -> 가능 (0,1) -> (0,0) 1. S 의 좌표를 확인 2. X(장애물)의 좌표를 확인 3. 이동 가능여부 판단 4. 이동 및 결과 def solution(park, routes): answer = [] start = '' xxx = [] for i in range(len(park)): if 'S' in park[i]: start = [i,park[i].index('S')] if 'X' in park[i]: for k,v in enumera..

players 의 배열의 원소 위치를 바꾸는데 callings 에서 해당 원소가 나올때마다 인덱스를 왼쪽으로 이동 하게된다. mumu soe poe kai mine kai -> mumu soe kai poe mine kai -> mumu kai soe poe mine mine -> mumu kai soe mine poe mine -> mumu kai mine soe poe 1. callings 에서 원소를 하나씩 꺼내온다. 2. players 에서 해당 원소의 위치를 찾는다. 3. 왼쪽으로 한칸 땡겨준다. 4. callings 의 모든 원소에 대해서 반복한다. def solution(players, callings): answer = [] for call in callings: print(players...

이게 어떤 약관의 종류인지? 수집일자가 언제인지? 언제까지 보관가능한지? 파기해야되는지 아닌지 ? today : 오늘 날짜 - 파기를 판단하는 기준 일 terms : ["약관종류 기간", ... ] privacies : ["수집일 종류", ... ] result : [파기할privacies의 원소, ... ] 파기 일자 구하는 방법 개월에 + 해당 개월수를 더하고 , 일에서 1일을 뺀 값을 유지 기간 마지막 날이 된다. 이 날보다 today 가 이후라면 파기하게된다. 2021.05.02 A 의 경우 6개월이므로 2021.(05+6).02-1 => 2021.11.01 일 이된다. 2019.01.01 D 의 경우 5개월 2019.06.00일 이 되므로 -> 2019.05.28 일 이 된다. [모든 달은 28..

이 문제를 보고 언어능력이 부족해지는 느낌이 들었다. 그림으로 보면 이렇게 쉽게 이해가 되는데.. . 은 빈곳 # 은 지워야할 문서의 위치이다. 간단하게 생각하면 좌표 문제로 # 이 있는 좌표중 가장 작은곳과 가장 큰곳을 찾으면 될거같다. 1. 리스트에서 # 이 가장 먼저 나오는 원소의 위치 2. 각 원소 (. 과 # 중에서 ) 에서 # 이 가장 먼저 나오는 원소의 위치 3. 리스트에서 # 이 가장 마지막에 나오는 원소의 위치 4. 각 원소 (. 과 # 중에서 ) 에서 # 이 가장 마지막에 나오는 원소의 위치 1번을 예로 들면 [".#...", "..#..", "...#."] 리스트의 원소에서 # 은 0 1 2 에서 나오고 원소 내에서 #의 위치가 각각 1 2 3 에서 나온다. (0,1) , (2+1,3..

마치 sql 을 보는 느낌이다. data ext 뽑아내는 데이터 종류 : code, data, maximum , remain val_ext 뽑아내는 데이터 기준 값 : 숫자 sort_by : 정렬 기준 result : val_ext 의 숫자와 비교한 ext 의 해당 컬럼 값이 작은 것만 sort_by 에 따라 오름차순 정렬 . sql 문으로 하면... 편할꺼 같긴한데 1. ext 값에 따라서 data 의 몇번째 컬럼을 비교할지 2. 비교하여 해당되는 결과를 저장 3. 정렬 하여 표현 ext 에는 문자가 들어가며 이는 data 에 표기가 되어 있지않다 따라서 빈 배열 필요. def solution(data, ext, val_ext, sort_by): answer = [] # 어떤 걸로 비교하는지 ext_l..