프로그래밍 101

알고리즘 문제 유형 - 완전탐색(permutation, combination)

브루트 포스(Brute Force) 시간 제한에 걸리지 않을 것 같거나, 풀이 방법이 바로 떠오르지 않는 문제의 경우 완전탐색으로 풀이를 시작하는 것도 방법 순열(permutation) 모든 경우의 수를 순서대로 살펴볼 때 용이 1 2 3 4 5 6 from itertools import permutations v = [0,1,2,3] for i in permutations(v,4): print(i) cs 조합(combination) 배열에서 특정 n개를 뽑아야 하는 경우(순서 상관 x) 1 2 3 4 5 6 from itertools import combinations v = [0,1,2,3] for i in combinations(v,2): print(i) cs

자료구조(배열, 연결리스트, 스택, 큐, 맵, 집합)

배열 - 배열 탐색 속도 : O(1) 배열은 임의접근(random access)를 통해 빠르게 탐색 가능 => 탐색 속도 O(1) ex) arr[2]에 접근 위해서는 => arr 배열 시작 주소 + 2(인덱스)*4byte(int 크기) = arr[2]의 메모리 주소값 - 배열 삽입/삭제 속도 : O(N) 삽입/삭제는 O(N)으로 탐색보다 느린데 왜냐하면 삽입/삭제를 위해서는 나머지 인덱스의 값들을 움직여야 하기 때문에 최소 0개~최대 N개를 미뤄야 하므로 시간복잡도가 O(N) 연결리스트(Linked List) - 연결리스트 탐색 속도 : O(N) 연결리스트는 배열과 달리 임의접근 불가 n번째 인덱스에 가기 위해서는 n개의 노드를 거쳐야 하므로 O(N)으로 탐색 속도 느림 - 연결리스트 삽입/삭제 속도 :..

프로그래머스_두 큐 합 같게 만들기(Java)

https://school.programmers.co.kr/learn/courses/30/lessons/118667?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 답안 : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 import java.util.*; class Solution { public int solution(int[] queue1, int[] queue2)..

프로그래밍 2023.07.10

프로그래머스_python lv0. n의 배수 고르기

https://school.programmers.co.kr/learn/courses/30/lessons/120905 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 답안 : 1 2 def solution(n, numlist): return [e for e in numlist if e%n == 0] cs 배수를 구하는 것은 주어진 수로 나누었을때 나머지가 0인 것을 찾으면 된다. comprehension 문법으로 한줄로 짧게 배열을 만들었다. 개선안 : 1 2 3 4 def solution(n, numlist): # lambda 식과 filter 함수 사..

프로그래머스_python lv0. 숫자 찾기

https://school.programmers.co.kr/learn/courses/30/lessons/120904 내 답안 : 1 2 3 4 5 6 def solution(num, k): answer = 0 # num과 k 모두 str로 변환해 find함수 사용 answer = str(num).find(str(k)) if answer == -1 : return answer else : return answer+1 cs 개선안 : 1 2 def solution(num, k): return -1 if str(k) not in str(num) else str(num).find(str(k)) + 1 cs 다른 사람들의 풀이도 유사했다. 한 줄로 끝낼 수 있는 풀이라서 가져왔다. not in 구문도 사용 가능하..

프로그래머스_python lv0. 구슬을 나누는 경우의 수

https://school.programmers.co.kr/learn/courses/30/lessons/120840 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 답안 : 1 2 3 4 5 6 7 8 9 10 11 def solution(balls, share): #팩토리얼 구하는 함수 정의 def factorial(n): fac = 1 for i in range(1,n+1): fac *= i return fac # balls개 중에서 share개를 선택하는 경우의 수 answer = factorial(balls) / (factorial(balls -..

프로그래머스_python lv0. 개미 군단

https://school.programmers.co.kr/learn/courses/30/lessons/120837 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 답안 : 1 2 3 4 5 6 7 def solution(hp): answer = hp//5 if hp%5!=0: answer += (hp%5)//3 if ((hp%5)%3)!=0: answer += (hp%5)%3 return answer cs 분명 짧은 코드로 풀 수 있을 것 같은 느낌이 들어 고민하다가 문제를 푸는데 의의를 두고 풀었다. 다시 봐도 지저분하다.. 개선안 : 1 2 def..

프로그래머스_python lv0. 순서쌍의 개수

https://school.programmers.co.kr/learn/courses/30/lessons/120836 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 답안 : 1 2 3 4 5 6 def solution(n): count = 0 for i in range(1,n+1): if n%i == 0: count+=1 return count cs n을 1부터 n까지의 수로 나누면서 나누어떨어지는 수의 개수를 구한다. 나누어떨어지는 경우 몫이 존재하니까 반드시 순서쌍을 이룰 수 있다. 개선안 : 1 2 def solution(n): return len..

프로그래머스_python lv0. 진료순서 정하기

https://school.programmers.co.kr/learn/courses/30/lessons/120835 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 답안 : 1 2 3 4 5 6 7 8 def solution(emergency): answer = [] priority = sorted(emergency, reverse = True) # emergency를 내림차순 정렬해서 priority에 넣음 for eInEmer in emergency: # emergency의 요소에 차례로 접근하면서 for eInPri in priority: # pr..

프로그래머스_python lv0. 외계행성의 나이

https://school.programmers.co.kr/learn/courses/30/lessons/120834 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 답안 : 1 2 3 4 5 6 7 def solution(age): answer = '' # 변환 테이블을 딕셔너리로 선언 convert = {'0':'a','1':'b','2':'c','3':'d','4':'e','5':'f','6':'g','7':'h','8':'i','9':'j'} for i in str(age): # int로 들어온 age를 str으로 변환해 반복 answer += c..