일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- BF
- 백준
- python3
- 프로그래머스
- 신나는함수실행
- 정렬
- Github
- Python
- Loss
- 1일1솔
- Algorithm
- 백트래킹
- 브루트포스
- two pointer
- 머신러닝
- CS
- 재귀함수
- ML
- backtracking
- Virtual Memory
- 코테
- dfs
- OS
- 코딩테스트
- 재귀
- 파이썬
- 알고리즘
- 완전탐색
- sort
- 투포인터
- Today
- Total
목록코테 (9)
이것저것 공부 기록하기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bg2y4R/btrq2jOtvMh/LyoBf8OjisbmI8zgqxiU01/img.png)
문제링크 https://programmers.co.kr/learn/courses/30/lessons/12952 코딩테스트 연습 - N-Queen 가로, 세로 길이가 n인 정사각형으로된 체스판이 있습니다. 체스판 위의 n개의 퀸이 서로를 공격할 수 없도록 배치하고 싶습니다. 예를 들어서 n이 4인경우 다음과 같이 퀸을 배치하면 n개의 퀸은 programmers.co.kr 문제설명 문제풀이 def promising(i, col): # 대각선 방향 겹치는지 체크 k = 1 flag = True while k < i and flag: if col[i] == col[k] or (abs(col[i]-col[k]) == i-k): flag = False k += 1 return flag def nqueen(i,n,c..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/kMxgC/btrqAVeQNQA/UuxfB30GoghNSropWz5EQk/img.png)
문제링크 https://www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 문제설명 앞서 풀이했던 15649번: N과 M(1) 문제와 유사하며, 문제의 조건이 약간 변형되었다. '고른 수열은 오름차순이어야 한다' 는 조건이 추가되었다. 백트래킹으로 풀이하면 pruning 과정에서 해당 조건을 추가해주면 된다. 또한, 경우의 수로 풀이하는 경우에는 오름차순 조건을 충족시킨다는 건 순서 상관없이 같은 수열로 취급한다는 의미이므로, 조합을 이용해서 풀 수 있다. 문..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cEh41O/btrqmNn5cjS/iraqMqW8LQ0cxbwsTKCKHk/img.png)
문제링크 https://www.acmicpc.net/problem/1427 1427번: 소트인사이드 첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 문제설명 배열이 아니라 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬하는 문제이다. 정렬문제이므로 어차피 문자열로 처리해야 했기에 입력값을 int로 변환하지 않고 문자열 타입 그대로 받았다. 그 후 sorted() 를 취해 문자열을 정렬한 후, "".join() 을 사용했다. 참고 python에서 문자열 자체를 정렬하려면, s.sort()를 쓰면 안된다. string의 경우 첫글자의 주소값으로 참조를 하기에 원본이 변경되면 안되므로, str type에 sort() ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bAOVTa/btrqirr7QLm/hsbHHbhTSbvMot7gDKXLtk/img.png)
문제링크 https://www.acmicpc.net/problem/2108 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 문제설명 홀수 N개의 값들에 대해 산술평균, 중앙값, 최빈값, 범위를 차례로 구하는 문제로 까다로운 조건이 없었다. 최빈값이 여러 개 있을 때에는 최빈값 중 두 번째로 작은 값을 출력해야 하는 조건이 주어졌다. 이 조건에 대해서는 Counter의 most_common으로 2개까지만 구한 후 케이스를 구분하는 방식을 취했다. most_common으로 최빈값을 구한다면, 중앙값 뿐 아니라 최빈값에 대해서도..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bcApto/btrpffTYuuY/Y1qyLNbZKeKSxxKaa5s810/img.png)
문제링크 https://www.acmicpc.net/problem/2447 2447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 www.acmicpc.net 재귀함수로 푸는 문제이다. 규칙파악이 포인트이고, 그 이후에는 재귀로 풀면 된다. 규칙파악 일정하게 가운데가 뚫린 정사각형 패턴이 반복되고 있다. 예를 들어, 3(=3^1)일 때는 가운데에 공백이 있고 1(=3^0)개 씩의 별이 찍히고 있다. 따라서 패턴은 다음과 같다. 3^i일 때 가운데를 공백으로 하고, 3^(i-1) 개 씩의 별 찍는다. 또한, 정사각형의 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/IIAnR/btroITq82SX/1bV8g0S03OIhRbgBxggzZK/img.png)
https://www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net n = int(input()) tmp = [] for i in range(n): tmp.append(input().split()) tmp = [[int(x[0]),x[1]] for x in tmp] tmp.sort(key=lambda x:x[0]) for i in range(n): print(*tmp[i]) 정렬문제인데 나는 그냥 sort 써서 했다보니 채점시간이 4000ms이 걸렸다. 이후에 좀 더 ..
둘 다 완전탐색 시 시간초과가 날 때 유용하게 사용될 수 있다. 투포인터 문제 풀다가 차이가 궁금해서 정리해봤다. 투포인터 vs 이분탐색 투포인터 : left, right 두 개의 포인터를 한 칸씩 이동하면서 알맞은 값을 찾음 이분탐색 : mid를 활용해 매 연산마다 탐색하는 범위를 절반으로 좁혀나감 투포인터(Two Pointer) 이분탐색(이진탐색, Binary Search) 시간복잡도 O(N) O(log N) 가정 특별히 없으나, 일반적으로 배열이 정렬되어있을 때 좀 더 유용 데이터가 정렬되어있어야 함 방식 양 끝단에서 한 칸씩 이동하면서 알맞은 값을 찾음 mid를 활용해서 매 연산마다 탐색하는 범위를 절반으로 좁혀나감 참고 파이썬 알고리즘 인터뷰 https://skesswswkk.tistory.co..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/csAht4/btqVtbFutqx/eBBD66MYUXL7HDFdqNQLM1/img.png)
programmers.co.kr/learn/courses/30/lessons/42746 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 programmers.co.kr 문제 설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 n..