본문 바로가기

Algorithms & CS15

[Python] 프로그래머스 - 더 맵게 | heapq 동작 원리 나의 풀이 import heapq def solution(scoville, K): answer = 0 scoville.sort() # 빠뜨리지 말자 while scoville[0] 1: heapq.heappush(scoville, heapq.heappop(scoville) + heapq.heappop(scoville) * 2) answer += 1 else: answer = -1 break return answer cs 처음에는 list.sort()로 접근 하다가 효율성 케이스 실패로, heapq로 변경. 그런데 while문 타기 전 최초에 한번은 리스트 정렬을 해줘야하는데, 그걸 빠뜨려서 테스트 케이스에서 계속 몇 개가 삐꾸 났다. 실제 코테 상황에는 이런 사소한 부분이 오히려 발견하기 어려워서 당황할.. 2021. 8. 12.
[Python] 프로그래머스 - 완주하지 못한 선수 나의 풀이 def solution(participant, completion): for i in participant: for i in completion: participant.remove(i) return participant[0] cs 예전에 자바 이중루프로 풀어보았던 문제를 유사한 방식으로 파이썬으로 풀어보았다. 테스트 케이스는 아주 간단하게 통과했으나, 또 다시 정확도 검사에서 실패..! 그사이에 프로그래머스 정확도 검사 케이스가 추가되었던 걸까... 다른 사람의 풀이 def solution(participant, completion): temp = 0 dic = {} for part in participant: dic[hash(part)] = part temp += int(hash(part)).. 2021. 8. 10.
[Python] 프로그래머스 - 가장 큰 수 나의 풀이 from itertools import permutations def solution(numbers): str_list = [] int_list = list(permutations(numbers)) for num in int_list: str_list.append("".join(map(str, num))) return str(sorted(map(int, str_list), reverse=True)[0]) cs permutations를 사용해 리스트 요소들의 순열의 조합을 구한 후, 내림차순으로 정렬해 0번째 인덱스 값을 리턴하는 방법. 테스트 케이스는 모두 통과했으나, 정확성 테스트에서 시간초과로 실패! 다른 사람의 풀이 from functools import cmp_to_key def com.. 2021. 8. 9.
동적계획법(Dynamic Programming) - 피보나치 숫자 f[n] = f[n-1] + f[n-2] 위의 식을 계산하는 가장 빠른 방법은? 1. Fibonacci Numbers : f[n] 부터 시작해서 f[1]을 끝으로 2의 n승 회의 연산이 필요, 너무 많은 연산이 반복됨. 단순분할정복이라고도함. int finbonacci (int n) { int[] f = new int[100]; /* if(n==1 || n==2) { return 1; } else { return finbonacci(n-2) + finbonacci(n-1); } */ if(n == 1) return 1; if(n == 2) return 1; return f[n] = finbonacci(n - 1) + finbonacci(n - 2); } 2. Memoization : 이미 계산된 f값(중.. 2020. 11. 12.
[Javascript] 프로그래머스 - 위장 https://programmers.co.kr/learn/courses/30/lessons/42578 코딩테스트 연습 - 위장 programmers.co.kr 나의 풀이 function solution(clothes) { var answer = 1; var answerArr = new Array(); var type = new Array(); for(var i = 0; i acc.includes(curr) ? acc : [...acc,curr],[]); for(var i = 0; i < uniqueType.length; i++) { an.. 2020. 8. 29.
자바 메모리 구조 이해하기 - Stack, Heap public class Memory { // stack 2nd public static void main(String[] args) { int i=1; // Heap 1st Object obj = new Object(); // Heap 2nd Memory mem = new Memory(); Memory.foo(obj); mem.foo1(obj); } // stack 1st private static void foo(Object param) { String str = param.toString(); System.out.println(str); } // stack 3rd private void foo1(Object param) { // Heap 3rd String str = param.toString(); .. 2019. 7. 30.
[Java] 프로그래머스 - 같은 숫자는 싫어 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면, arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다. arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다. 배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요. 제한사항 배열 arr의 크기 : 1,000,000 이하의 자연수 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다.. 2019. 7. 18.
[JAVA] 프로그래머스 - 가운데 글자 가져오기 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.(s는 길이가 1 이상, 100이하인 스트링입니다) Solution class Solution { public static String solution(String s) { if(s.length()%2==1) s = s.substring(s.length()/2, s.length()/2+1); else s = s.substring(s.length()/2-1, s.length()/2+1); return s; } } 다른 사람의 풀이 class StringExercise{ String getMiddle(String word){ return word.substring((word.le.. 2019. 7. 16.
[JAVA] 프로그래머스 - 2016년 문제 설명 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 TUE를 반환하세요. 제한 조건 2016년은 윤년입니다. 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다) 나의 솔루션 import java.util.Arrays; public class Solution { public static String solution(int a, int b) {.. 2019. 7. 15.