일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 검색트리
- java
- 클린코드
- 다이나믹 프로그래밍
- android
- javascript
- 순환
- 자바
- 코딩테스트
- 해슁
- algorithm
- SWEA
- Kotlin
- CSS
- html
- CleanCode
- 알고리즘
- Color
- DP
- DFS
- codecademy
- Spring
- BFS
- front-end
- Web
- 구현
- 프로그래머스
- SQL
- 정렬
- inflearn
- Today
- Total
목록Algorithm (81)
깡뇽
Siver 4에 해당하는 문제이다. 주어진 수 N개 중에서 소수가 몇 개인지 찾고, 소수의 개수를 출력하는 문제이다. 1978번 소수 찾기 풀이 파이썬 연산자 중에서 %는 나머지를 찾아준다. ( /는 나눈 몫의 실수형, //는 나눈 몫의 정수형 ) 소수에는 1이 포함되지 않는다. 1 이외의 자연수 중에서 1과 자기자신으로만 나누어 떨어지는 수를 소수(prime number)라고 말한다. [시도1] pypy3 틀렸습니다 import sys n = int(sys.stdin.readline()) numbers = list(map(int, sys.stdin.readline().split())) cnt = 0 for i in numbers: #1은 소수가 될 수 없으므로 1이 아닌 모든 수 if i != 1: f..
첫줄 : 입력할 점의 개수 N N줄 : 점( x와 y 값 ) 입력받은 점을 x부터 정렬, x가 같으면 y에 따라 정렬 2845번 파티가 끝나고 난 뒤 풀이 [시도1] pypy3 시간 초과 n = int(input()) numbers = [] for i in range(0, n): a, b = map(int, input().split()) numbers.append([a,b]) numbers.sort() for i in range(0, n): num = numbers[i] a = num[0] b = num[1] print(str(a) + ' ' + str(b)) [시도2] pypy3 시간 초과 import sys n = int(sys.stdin.readline()) numbers = [] for i in ..
코딩을 하기는 싫고,, 백준 하루에 1개를 풀기로 했으나 어제 못해서 하나를 더 풀어야 한다...! 그래서 Siver 5에서 해결 숫자가 높은 문제를 하나 더 골라보았다. 32,822명이 풀었다고 하는데 문제를 열자마자 이상한 기호들에 뒤로 가기를 누르고 싶었지만 참아보았다.. 2941번 크로아티아 알파벳 풀이 [시도1] pypy3 틀렸습니다! -> 맞았습니다! word = ['c=','c-','dz=','d-','lj','nj','s=','z='] input = input() len = len(input) count = 0 i = 0 while i len-2: count += 1 break elif i == len-2: letter = input[i:] if letter in ..
solved.ac에서 Silver 5에 속하는 문제이다. 레벨마다 문제를 푼 사람 수가 많은 문제들을 위주로 풀라고 조언을 들었다! 이 문제는 30,450명의 사람들이 해결을 했다고 한다..! 내가 이 문제를 풀고 나서 숫자가 1개 높아진 것일까? 궁금하군 다음에 문제를 풀 때에 확인해 봐야겠다. 2751번 수 정렬하기 2 풀이 [시도1] pypy3 맞았습니다!! n = int(input()) numbers = [] for i in range(0, n): num = int(input()) numbers.append(num) numbers.sort() for i in range(0,n): print(numbers[i]) 아무리 쉬운 문제더라도 나의 풀이가 가장 좋다고 이야기할 수는 없지만 혼자 해냈을 때는..
sloved.ac를 통해 알게된 나는 Bronze5...! (물론 백준 문제들을 정말 몇 개 밖에 풀지 않아서 그런 것 같지만,,, 우선은 낮은 등급 용납 못해!) 그리하여 겨울방학동안 일주일에 3문제 이상 푸는 것을 목표로 잡았다. 일단 오랜만에 첫 시작으로 Bronze5 등급으로 분류된 문제 중에서 제목이 마음에 드는 한 문제를 골라서 풀어 보았다😀 아자아자 파아팅ヽ(✿゚▽゚)ノ 2845번 파티가 끝나고 난 뒤 풀이 [시도1] pypy3 맞았습니다!! l, p = map(int, input().split()) one, two, three, four, five = map(int, input().split()) total = l * p print(one-total, two-total, three-tota..
Day3 그리디 문제풀기 - 큰 수의 법칙 (2019 국가 교육 기관 코딩 테스트 기출 / 난이도 하) 배열 안 N개의 숫자들 중에서 숫자들을 골라 M번을 더하여 가장 큰 수를 출력해야한다. 그런데 특정 인덱스 숫자가 연속 K번을 초과하여 더해질 수 없다. 첫째 줄 : N, M, K 자연수 입력. 공백 구분 둘째 줄 : N개의 자연수. 공백 구분 K는 항상 M보다 작거나 같다. 큰 수의 법칙 풀이 import sys n, m, k = map(int, sys.stdin.readline().split()) numbers = list(map(int, sys.stdin.readline().split())) numbers.sort() a = numbers[-1] #가장 큰 수 b = numbers[-2] #두 번..
Day2 그리디(greedy) = 탐욕적 = 현재에만 집중! 나중은 생각하지 않아! 그리디 알고리즘은 문제 출제의 범위가 넓어서 암기가 거의 불가능하므로 많은 유형의 문제들을 접해봐야 함. 문제 속에 숨어 있는 기준을 찾아서 접근해야 하고, 정렬 알고리즘과 함께 엮여서 자주 출제됨. 예제1) 거스름 돈 Q. 손님에게 거스름돈 N원을 가장 적은 수의 동전으로 주려면 어떻게 해야할까? A. 손님에게 가장 큰 화폐 단위부터 돈을 거슬러 주자. N = 1260일 때 500원, 100원, 50원, 10원짜리 동전 최소한의 개수로 거슬러 주기. n = 1260 count = 0 # 큰 액수의 돈부터 차례로 확인 coin_type = [500, 100, 50, 10] for coin in coin_type: coun..
오늘부터 "이것이 취업을 위한 코딩 테스트다 with 파이썬" 책을 보면서 알고리즘을 다시 더 깊게 공부하고, 티스토리에 알게된 점들을 정리해보려고 한다. 이 책을 예전부터 코딩 테스트 공부를 위해서 사야할까 고민하다가 결국 2학기 개강을 앞두고 사게 되었다. 전부 다 보지는 못하더라도 차근 차근 하나씩 이해하며 해나가는 것을 목표로 해보자. Day1 - 온라인 코딩 테스트 응시할 때에 온라인 IDE를 이용하게 된다면 소스코드가 'Public'과 같은 공개 설정으로 되어 있지는 않은지 확인해야한다! - 코드업 -> [문제] - [문제집]의 [기초 100제] 풀기 - 백준 온라인 저지 + solved.ac 확장 프로그램(문제 분류와 난이도 참고 가능) - 프로그래머스 -> 카카오 공채 문제 제공 - SW ..
20361번 일우는 야바위꾼 파이썬 풀이 [시도1] pypy3 시간 초과 n, x, k = map(int, input().split()) turn = [list(map(int, input().split())) for _ in range(k)] cup = [0] * n cup[x-1] += 1 for i in range(0, k): for j in range(0, 2): if turn[i][j] == cup.index(1)+1: if j == 0: cup[turn[i][j]-1] -= 1 cup[turn[i][j+1]-1] += 1 break else: cup[turn[i][j]-1] -= 1 cup[turn[i][j-1]-1] += 1 print(cup.index(1)+1) => 좀 더 효율적으로 코드를..
202999번 3대 측정 파이썬 풀이 [시도1] pypy3 출력 초과 n, k, l = map(int, input().split()) arr = [list(map(int, input().split())) for _ in range(n)] count = 0 cnt = '' for i in range(0, n): sum = 0 sum = arr[i][0] + arr[i][1] + arr[i][2] if sum >= k and arr[i][0] >= l and arr[i][1] >= l and arr[i][2] >= l : count = count + 1 cnt = cnt + str(i) print(count) for i in range(0,len(cnt)): for j in range(0,3): print(..
- Quick Sort : 빠른 정렬 => Merge Sort처럼 분할 - 정복 - 합병의 분할정복법을 이용함. Ex) 정렬할 배열이 주어졌을 때, 마지막 수를 기준(pivot)으로 삼음 -> 기준보다 작은 수는 기준의 왼쪽에 나머지는 기준의 오른쪽에 오도록 재배치(분할:partition)를 함. -> 기준의 왼쪽과 오른쪽을 각각 순환적으로 정렬함. => 정렬 완료 - 최악의 경우 항상 한 쪽은 0개, 다른 쪽은 n-1개로 분할되는 경우 이미 정렬된 입력 데이터 ( 마지막 원소를 기준으로 선택하는 경우 ) - 최선의 경우 항상 절반으로 분할 되는 경우 => 분할이 얼마나 되어 있는지에 따라 Quick Sort는 영향을 받음. - 평균시간복잡도 최악의 경우는 매우 극단적인 예이며 대체적인 경우가 존재 - ..
- 분할정복법 : 분할, 정복, 합병을 거치는 방법 분할 : 해결하고자 하는 문제를 작은 크기의 동일한 문제들로 분할 정복 : 각각의 문제를 순환적으로 해결 합병 : 작은 문제의 해를 합하여(merge) 원래 문제에 대한 해를 구함 - Merge Sort : 합병정렬 1. 분할 -> 데이터가 저장된 배열을 절반으로 나눔. (divide) 2. 정렬 -> 각각을 순환적으로 정렬함. (recursively sort) 3. 합병 -> 정렬된 두 개의 배열을 합쳐 전체를 정렬함. (merge) => 합병 과정이 실질적으로 중요함. Ex) A | G | L | O | R 과 H | I | M | S | T 의 정렬된 두 배열이 있을 때, A와 H는 각 배열에서 가장 작은 값이며 두 배열을 하나의 배열로 합병할 때..