목록프로그래머스 (108)
연습장
2개의 배열 A = [ ] , B = [ ] 에서 각각 1개씩 숫자를 뽑아 곱한 값들을 모두 더했을때 최소가 되는 값을 return 하는 문제 ex . 예시 A = [1,2,3,4,5] B = [1,2,3,4,5] 꺼내는 방법은 여러개가 있지만 둘다 서로 작은걸 꺼낼 경우 1*1 + 2*2+ 3*3 + 4*4 + 5*5 == 55 가 되며 하나는 큰것 하나는 작은걸 꺼낼 경우 1*5 + 2*4 + 3*3 + 4*2 + 5*1 == 35 이 되며 무작위로 꺼낸다고 가정하면 1*4+2*5+3*2+4*1+5*3 == 39 2번째 방법이 최소값이 될것으로 예상이 된다. 입력받은 배열은 중복도 있고 정렬이 되어있지 않다는것을 고려하여 문제를 풀면 다음과 같다. def solution(A,B): answer = 0..
1. 동물수 구하기 기본적인 Select 문에 count(*) 을 활용하여 테이블의 모든 Row 수를 알 수 있다. SELECT count(*) FROM ANIMAL_INS; 2. 중복 제거하기 Select NAME from ANIMAL_INS ; -> ANIMAL_INS 테이블에서 NAME 컬럼만 추출할 수 있고 SELECT count(distinct(NAME)) from ANIMAL_INS ; distinct 를 통해 중복제거 및 count 를 활용하여 수를 셀 수 있다. 3. 최솟값 구하기 가장 먼저 들어온 동물의 들어온 시간을 구하는 문제. 테이블에서 날짜를 조회 후 가장먼저 == 최소값 을 조회 SELECT MIN(DATETIME) from ANIMAL_INS; 4. 동명 동물 수 찾기 동물의 ..
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..