본문 바로가기

Problem Solving41

[ SWEA ] D2 - 1970, 1966, 1961, 1959 - python 문제풀이 1970 쉬운 거스름돈 지불할 수 있는 돈의 종류(option)들을 순회하면서, 최대한 낼 수 있는 개수만큼 쓰고 다음 단위(더 작은 지불 단위 옵션)으로 넘어가게 해서 풀 수 있음 options = [50000,10000,5000,1000,500,100,50,10] for tc in range(int(input())): N = int(input()) cnt = [0]*8 for i in range(8): if N != 0: cnt[i] += N//options[i] N %= options[i] else: break print("#{}\n{}".format(tc+1, " ".join(map(str,cnt)))) 1966 숫자를 정렬하자 방법 1 - sort 함수 사용 방법 2 - 개수를 세어나갈 카운트 .. 2021. 6. 26.
[ SQL 고득점 kit ] String, Date - mysql 01 루시와 엘라 찾기 SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS WHERE NAME in ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty'); 02 이름에 el이 들어가는 동물 찾기 mysql의 대소문자 구분여부 컬럼, 테이블명 : 대소문자 구분O VARCHAR,TEXT같은 데이터 : 대소문자 구분X 따라서 이 문제의 경우 대소문자 지정을 따로 해주지 않아도 풀리기는 한다(아래처럼) SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE ANIMAL_TYPE = 'Dog' AND NAME LIKE '%el%' ORDER BY NAME; 만약 mysql을 쓰지 않을때는 low.. 2021. 6. 26.
[ SQL 고득점 kit ] JOIN - mysql 01 없어진 기록 찾기 SELECT O.ANIMAL_ID, O.NAME FROM ANIMAL_OUTS O LEFT JOIN ANIMAL_INS I ON O.ANIMAL_ID = I.ANIMAL_ID WHERE I.ANIMAL_ID IS NULL ORDER BY O.ANIMAL_ID; INS에는 있고 OUTS에는 없는 데이터이기때문에 INS를 기준으로 LEFT JOIN 사용 02 있었는데요 없었습니다 SELECT I.ANIMAL_ID, I.NAME FROM ANIMAL_INS I INNER JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID WHERE I.DATETIME > O.DATETIME ORDER BY I.DATETIME; DATETIME 자체로 비교 가능하다는 점.. 2021. 6. 25.
[ SWEA ] D2 - 1983, 1979, 1976, 1974 - python 문제풀이 1983 조교의 성적매기기 scores = ["A+","A0","A-","B+","B0","B-","C+","C0","C-","D"] for tc in range(int(input())): N,K = map(int, input().split()) # i번째 점수는 (i+1)번 학생의 점수 info = [list(map(int, input().split())) for _ in range(N)] student_scores = [] for i in range(N): total = info[i][0]*0.35 + info[i][1]*0.45 + info[i][2]*0.2 student_scores.append([total, (i+1)]) student_scores.sort(key=lambda x:x[0],rev.. 2021. 6. 24.
[ SWEA ] D2 - 2001, 1989, 1986, 1984 - python 문제풀이 2001 파리퇴치 퇴치할 파리 정사각형이 어디까지 이동할 수 있을 지 파악해서 갈 수 있는 곳 까지만 for문을 도는게 그나마 시간을 조금이라도 줄이는 방법 for tc in range(int(input())): N,M = map(int, input().split()) fly = [list(map(int, input().split())) for _ in range(N)] max_value = 0 for i in range(N-M+1): for j in range(N-M+1): row_idx = i col_idx = j tmp = 0 for k in range(M): tmp += sum(fly[row_idx+k][col_idx:col_idx+M]) if tmp > max_value: max_value = .. 2021. 6. 24.
[ SWEA ] D2 - 1859, 1926, 2007, 2005 - python 문제풀이 1859 백만장자프로젝트 문제를 먼저 잘 이해하고 생각한 뒤 풀면 생각보다 쉽게 풀리는 문제 Idea 1. 일단, 최대의 이익을 내려면 계속 사다가 가장 비싸게 팔 수 있는 시점에 팔아야 한다. Idea 2. 배열을 뒤에서 부터 순회하면서, 특정 시점에서 얼마에 파는게 가장 최대일지 구하면 된다 - 제일 마지막 순간에 팔 수 있는 가격을 초기값으로 설정 - 뒤에서부터 오면서, 더 비싸게 팔 수 있는 순간이 올 경우(t2) 최대값으로 가격을 갱신해주기 - 더 비싸게 팔 수 있는 순간이 아니라면, 사는게 무조건 이득임 for tc in range(int(input())): N = int(input()) data = list(map(int, input().split())) max_value = 0 curmax.. 2021. 6. 24.
[ SQL 고득점 kit ] IS NULL - mysql 01 이름이 없는 동물의 아이디 SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL ORDER BY ANIMAL_ID; ( 프로그래머스에서는 이미 ID순으로 정렬이 되어있어서 마지막 코드가 없어도 통과는 되지만, 문제 조건에 ID 순 정렬을 요구하고 있으므로 써주는 게 더 정확 ) 02 이름이 있는 동물의 아이디 SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NOT NULL ORDER BY ANIMAL_ID; 또는 NOT의 위치를 앞으로 가져와서 SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NOT NAME IS NULL ORDER BY ANIMAL_ID; 03 NULL 처리하기 데이터베이스 자체를 바꾸.. 2021. 6. 23.
[ SWEA ] D1 풀이 모음 - python 2072 홀수만 더하기 for tc in range(int(input())): a = list(map(int, input().split())) s = 0 for i in range(10): if a[i]%2!=0: s += a[i] print("#{} {}".format(tc+1, s)) 2071 평균값구하기 for tc in range(int(input())): a = list(map(int, input().split())) print("#{} {}".format(tc+1, round(sum(a)/10))) 2070 큰놈,작은놈,같은놈 for tc in range(int(input())): a,b = map(int, input().split()) print("#{} ".format(tc+1), end=.. 2021. 6. 23.
[ SQL 고득점 kit ] GROUP BY - mysql 01 고양이와 개는 몇 마리 있을까 IN 조건 또는 OR 조건으로 다양하게 풀이 가능 SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS count FROM ANIMAL_INS WHERE ANIMAL_TYPE IN ('Cat', 'Dog') GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE; or SELECT ANIMAL_TYPE,count(*) as 'count' FROM ANIMAL_INS WHERE ANIMAL_TYPE='Cat' or ANIMAL_TYPE='Dog' GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE 02 동명 동물 수 찾기 GROUP 으로 묶은 결과 자체에 대해 조건을 걸려면? - WHERE가 아니라 HAVI.. 2021. 6. 22.
[ SQL 고득점 kit ] SUM, MAX, MIN - mysql 01 최댓값 구하기 SELECT MAX(DATETIME) as 시간 FROM ANIMAL_INS; or SELECT DATETIME FROM ANIMAL_INS ORDER BY DATETIME DESC LIMIT 1; 02 최솟값 구하기 SELECT MIN(DATETIME) AS 시간 FROM ANIMAL_INS; or SELECT DATETIME FROM ANIMAL_INS ORDER BY DATETIME ASC LIMIT 1; 03 동물 수 구하기 SELECT DATETIME FROM ANIMAL_INS ORDER BY DATETIME ASC LIMIT 1; or SELECT COUNT(*) FROM ANIMAL_INS; 04 중복 제거하기 문제 조건 잘 확인(-NULL인 경우는 집계하지 않으며-),.. 2021. 6. 22.
[ SQL 고득점 kit ] SELECT - mysql 01 모든 레코드 조회하기 SELECT * FROM ANIMAL_INS ORDER BY ANIMAL_ID; 02 역순 정렬하기 : 정렬은 ORDER BY, 순서는 DESC(내림차순-큰값부터) or ASC(오름차순-기본값) SELECT NAME, DATETIME FROM ANIMAL_INS ORDER BY ANIMAL_ID DESC; 03 아픈 동물 찾기 SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION = 'Sick' ORDER BY ANIMAL_ID; 04 어린 동물 찾기 : 같지 않다 (NOT, !=, ) SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE NOT INTAKE_CONDITION='Aged' ORD.. 2021. 6. 21.
[ Codility ] MaxProductOfThree - python 개념 Lesson 6. Sorting 두 번째 문제 문제요약 입력으로 주어진 정수 배열에서 숫자 3개를 곱한 값 중 최대를 리턴하라 첫번째 접근(효율성 고려X) 문제에 충실히 만들수 있는 모든 인덱스 조합을 만들고, 그 조합대로 값을 곱한 뒤 최대일 경우 max-value값을 갱신해주는 코드(3개니까 당연히 3중 for문을 돌고, 시간복잡도는 O(N**3)이상) def solution(A): max_v = A[0]*A[1]*A[2] for i in range(len(A)-2): for j in range(i+1, len(A)-1): for k in range(j+1,len(A)): if A[i]*A[j]*A[k]>max_v: max_v = A[i]*A[j]*A[k] return max_v 두번째 접근(통.. 2021. 6. 18.