일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DFS
- 스택
- 백준알고리즘
- 코딩테스트
- DFS기초
- CSS
- Express
- react
- 코드트리
- DP
- 코딩테스트실력진단
- 그리디알고리즘
- 백준
- 알고리즘
- 자료구조
- 스택자료구조
- 블챌
- 코테
- 구현
- 완전탐색
- 파이썬
- 재귀
- BFS
- react-query
- 문자열
- DFS활용
- django
- 그리디
- JS
- socket.io
- Today
- Total
목록Algorithm 문제 & 공부/구현 (12)
꾸준하게 거북이처럼
20056번: 마법사 상어와 파이어볼 첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치 www.acmicpc.net 이런 유형의 문제는 시뮬레이션 + 구현 문제로, 한 좌표에서 여러개의 정보가 들어가는데, 보통 dictionary나 2차원 배열을 사용한다. 아래와 같이 dictionary를 써보니 코드가 생각보다 간략해졌다. 1. 조건 - m개의 파이어볼, 방향 8방향, 처음 끝 행과 처음 끝 열 연결되어있음. - d방향 s칸 이동, 명령 k번 - 2개이상 파이어볼이 있으면 같은 파이어볼 4개로 나누어짐.(모두 방향이 짝/홀수면 0,2,4..
17140번: 이차원 배열과 연산 첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다. www.acmicpc.net 구현 시뮬레이션 문제로, 문제 조건을 잘 체크해야한다. - 0은 정렬 X, - 정렬 하는 기준 : 등장 횟수 > 숫자 가 커지는! 순 - 크기가 달라지면 큰 행또는열 기준으로 0을 채워야함 - 행이나 열 크기가 100 넘으면 100x100으로 자르기 이 문제는 아래처럼 파이썬의 zip연산을 이용해서 열 정렬을 쉽게 할 수 있다. a = [[1,2,3], [4,5,6]] a = list(zip(*a)) print(a) # [(1,4) ,(2,5), (3..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 이해가 잘 되지 않았던 문제다. 결론적으로 이 문제는 원소의 개수가 가장 큰 두 집합을 구하는 문제다. cards에서 임의의 숫자를 선택하여 규칙대로 만들어진 1번째로 생긴그룹 2번째로 생긴 그룹의 원소 개수의 곱 중 최대값을 알아내야함. 어떤 수를 먼저 선택해도 규칙대로 하다보면 같은 집합의 형태가 나온다! 나만 그 집합의 순서가 다를 뿐, 그 중 1번 2번 그룹 원소 개수 곱의 최대값을 알아야하니, 제일 원소의 개수가 가장 큰 것 2가지를 구하면된다. import collections def solu..
12933번: 오리 첫째 줄에 영선이가 녹음한 소리가 주어진다. 소리의 길이는 5보다 크거나 같고, 2500보다 작거나 같은 자연수이고, 'q','u','a','c','k'로만 이루어져 있다. www.acmicpc.net 중요 포인트 1. 어떻게 종료 조건을 만들 것인지 + 한 번의 문자 검사 싸이클 이후에 어떤식으로 다음 싸이클을 넘길 것인지 => 여기서 나는 고민을 많이했다. while문으로 풀 생각을 하니 복잡해졌었다. 한 번 검사하는 싸이클을 돌고 나서 어떤 식으로 다음 싸이클로 넘어갈 것인가... for문으로 시작 하는 인덱스로 변수를 넘겨주는 방식을 선택했다. -> 하지만 종료조건은 언제가 되지? -> 모든 문자를 확인해서 좀 더 정확하고 쉬운 방법으로, 입력받은 문자열 하나씩 for문으로 받..
1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 처음에 문제를 맞추긴 했지만, 시간복잡도가 컸고, 복잡한 코드로 만들었다. 다시 여러 풀이를 읽어보며 나의 풀이로 수정했다. 아이디어 먼저, 문제를 읽어보면 체스판을 만들기 위해 8 x 8로 자르고, 색을 바꾸는 경우는 크게 두 가지 나뉜다고 한다. 가장 위쪽 왼쪽값이 흰색인지, 검은색인지 이 두 가지 경우에 따라 나머지 체스판의 색이 결정된다는 것. 이 부분이 가장 큰 힌트라고 할 수 있다. 먼저 8 x 8 체스판으로 자를 수 있는 경우는 index 가..
2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 나의 풀이: 216보다 작은 수 부터 시작해서 분해합을 구하고 그 합이 216과 같은지 확인하는 방법을 선택했다. 브루트 포스 알고리즘이다보니 모든 경우를 조사하기 때문에 이 방법을 선택했다. 하지만 어느 정도 숫자에 도달하면 216이 될 수 없기 때문에 (예를 들어 215,,200 천천히 분해합을 보다 100이나 더 작은수까지 가면)일일이 분해합을 끝까지 1이 될 때까지 구하면 효율성이 떨어진다. 입력값의 생성자의 최소를 가늠해서 ..

4948번: 베르트랑 공준 베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼 www.acmicpc.net 최근에 소수찾기 문제들을 풀다가 4948번에서는 시간초과 때문에 한 번 틀렸다. 처음에 제출한 코드는 def isPrime(x): if x == 1: return False else: for i in range(2, int(x ** 0.5) + 1): if x % i == 0: return False else: return True if __name__ == "__main__": ans = [] while True: n = int(input()) coun..
가끔 구현 문제를 풀다보면 for 문을 거꾸로 반복하는 방법을 적용하고 싶을 때가 있다. 방법은 크게 두 가지가 있다. arr = [1, 2, 3, 4] 라고 하자. 방법 1 : step 을 -1 로 두기 for i in range(len(arr) - 1 , -1, -1): ##### 배열의 마지막 index는 arr 배열 길이 - 1 을 한 것이기 때문에 len(arr) - 1 이 시작점이고, step이 -1 이기 때문에 마지막 지점에서 +1 한 것 까지 반복이다. => 3 부터 -1 +(+1) = 0 까지 -1 씩 반복. 방법 2 : reversed 사용하기 for i in reversed(len(arr)): #### 아무래도 역시 2번째 방법이 생각하기 간단하다!

관련 백준 알고리즘 문제 11723번: 집합 첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다. www.acmicpc.net ** 파이썬 집합 자료형's 특징 - 중복을 허용하지 않는다 - 순서가 없다 -> 리스트 처럼 인덱싱을 지원하지 않는다 집합 만들기 # s1 = {1, 2, 3} s1 = set([1,2,3]) # 문자열 s1 s2 = set("Hello") #s2 = {'e','H','l','o'} ** 문자열을 만들 때는 순서대로 만들어지지 않는다. 그러니 문자열 문제에서 중복 없애려고 set 을 사용할 때는 조심해야한다. 집합 자료형 관련 함수들 1. 값 한개 추가하기 (add) >>..

관련 백준 알고리즘 문제 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 1. 통계함수 모듈 불러오기 * 만약 오류가 난다면 pip install numpy 명령어로 설치를 하자. import numpy as np 평균 arr = [1,2,3,4,5] # 3.0 출력 np.mean(arr) 중앙값 arr = [1,2,3,4,5] # 3.0 출력 np.median(arr) 2. statistics 모듈 불러오기 mode 함수 사용 ( 최빈값 구할 때 사용 ) 최빈값 import statistics arr = [ 1,2,3,4..