일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준 16236
- Coroutine
- 백준 15685
- 웹어플리케이션 서버
- MSA
- java 기술면접
- 백준 19238
- spring oauth
- 파이썬
- JVM
- 백준 16235
- Kotlin
- 백준
- with recursive
- java
- 프로래머스
- 프로그래머스
- 백준 17626
- 백준 16719
- 백준 파이썬
- spring security
- JPA
- 백준 17779
- re.split
- Spring
- MySQL
- spring cloud
- springboot
- Spring Boot
- sql 기술면접
- Today
- Total
목록알고리즘/백준 (90)
시작이 반
구현문제이다. 열린 칸 주변에 지뢰가 몇개 있는지 확인(해당 위치에서 8방향) 하여 숫자를 출력한다. 만약 연린 칸에 지뢰가 있다면 모든 지뢰 또한 출력한다. 이중 반복문을 이용하여 구현하였다. dx, dy를 사용하여 좌표를 구하였음 n = int(input()) graph1 = list(input() for _ in range(n)) graph2 = list(input() for _ in range(n)) answer = [['.'] * n for _ in range(n)] dx = [-1, -1, -1, 0, 1, 1, 1, 0] dy = [-1, 0, 1, 1, 1, 0, -1, -1] def findBoom(): for i in range(n): for j in range(n): if graph1..
구현 문제이다. 사회자가 숫자를 부르면서 빙고판을 색칠해 가는데 빙고가 3개가 나오면 사회자가 몇번째에 빙고가 나왔는지 출력하는 문제이다. visited 리스트를 만들어서 사용하였다. 2차원배열의 전체에 해당하는 list row만 확인하는 list col만 확인하는 list 대각선을 확인하는 list list를 채우는 방식 만약 2차원 visited에서 0행이 빙고가 완성되면 row[0] 을 True로 바꿔준다. 열과 대각선도 마찬가지이다. 대신 대각선은 0, 1 로 이루어져있다. True의 개수를 3개 이상일때까지 row list, col list, 대각선 list를 확인한다. bingo = [list(map(int, input().split(' '))) for _ in range(5)] targets..
구현 문제이다. 울음소리를 보고 최소한의 오리가 몇마리인지 찾는다. 오리의 울음소리는 quack이다. q -> u -> a -> c -> k 를 순서대로 찾는다. ex) 울음소리가 quqacukqauackck 라면 quack를 순서대로 찾는다. quqacukqauackck 여기서 k 다음에 또 quack가 있다면 한마리의 오리가 연속으로 2번 소리를 낼 수 있다. (최소한의 오리 수를 찾아야 하기떄문에 중복가능) quqacukqauackck 즉 한 오리가 이렇게 소리를 낸다. 방문한 문자는 visited 리스트를 만들어 방문처리를 한다. 다음 오리는(파란색) quqacukqauackck 방문하지 않은 문자를 보고 quack를 찾는다. 녹음한 소리가 올바르지 않은 경우 - 문자열을 모두 방문을 하지 않았을..
소 리스트를 만들어 처음 관찰된 소들은 해당 위치를 저장한다. 처음 관찰된 소가 아니면 저장된 위치와 해당 위치를 비교하여 다르면 count를 증가시킨다. n = int(input()) cow = [-1] * 11 cnt = 0 for _ in range(n): target_cow, position = map(int, input().split(' ')) if cow[target_cow] == -1: cow[target_cow] = position else: if cow[target_cow] != position: cnt += 1 cow[target_cow] = position print(cnt)
구현 문제이다. 시작 좌표를 구한다. x = n / 2 y = n / 2 시작좌표에서 시작하여 상, 우, 하, 좌를 돌면서 1씩 더해간다. 이동 횟수는 정수(제곱근수) 만큼 이동한다. ex) 상 2 2의 제곱근 1.xxxx 위로 한칸까지 이동할 수 있다. 1칸 이동했으므로 오른쪽 확인 우 3 3의 제곱근 1.xxxx 오른쪽으로 한칸까지 이동할 수 있다. 1칸 이동했으므로 아래 확인 하 4 4의 제곱근 2 아래로 두칸까지 이동할 수 있다. 하 5 5의 제곱근 2 2칸 이동했으므로 왼쪽확인 ....... n = int(input()) target = int(input()) graph = list([0] * n for _ in range(n)) s_x, s_y = n // 2, n // 2 graph[s_x]..
구현 문제이다. 준현이는 현재 가진돈에서 주식을 살 수 있으면 살 수 있는 개수만큼 전량 매수하고 팔지 않는다. 성준이는 가격이 연속으로 3일 하락하면 해당 날에 주식을 전량 매수한다. 또한 가격이 연속으로 3일 상승하면 해당 날에 주식을 전량 매도한다. 마지막 날에 남은 돈과 주식을 갖고 있는 개수를 구하여 서로 비교한다. money = int(input()) stocks = list(map(int,input().split())) def jun(): left_money = money stock_n = 0 for stock in stocks: stock_n += left_money // stock left_money = left_money % stock if left_money == 0: break re..
다익스트라 알고리즘이다. 다익스트라 알고리즘은 edge의 가중치가 양수만 있을때 사용할 수 있다. 2가지 방법으로 풀 수 있다. 1. 해당 노드에서 이어진 노드들중 가중치가 가장 작은 경로를 선택한다. 2. 우선순위 큐를 사용하여 해결할 수 있다. 우선순위 큐를 이용하여 풀었다. (가장 작은 가중치를 선택해야함) 파이썬에서는 우선순위 큐를 사용하기위해 heapq를 사용할 수 있다. (동작은 min heap인듯 하다) 다익스트라를 풀기위해 필요한 것들 1. 우선순위 큐에 사용될 list ( queue = list() ) 2. 가중치를 저장할 list ( distance = list() ) 세팅 distance[시작점] = 0 우선순위 큐에 (해당 점의 가중치, 해당점) 을 넣는다. queue가 빌때까지 반..
문제를 이해를 못했다.. 출력에 첫째 줄에 가장 인접한 두 공유기 사이의 최대 거리를 출력한다. 라고 써있는데 인접한 두 공유기 사이 최대 거리가 뭔소린지 몰라서 문제부터 이해했다... 이해한 내용) 공유기 개수 3 좌표 : 1 2 4 8 9 만약 거리 = 2 라면 1에 설치하면 1+2 = 3 -> 다음 설치할 공유기 위치는 3이상인 좌표이다. 2에는 설치 못한다. 4에 설치 4+2 = 6 -> 다음 설치할 공유기 위치는 6이상인 좌표이다. 8에 설치 8+2 = 10 -> 다음에 설치할 공유기 위치는 10이상인 좌표이다. 9에는 설치 못한다. 끝----- 설치한 공유기 개수 3개 거리가 2일때 만족 만약 거리 = 3 라면 1에 설치하면 1+3 = 4 -> 다음 설치할 공유기 위치는 4이상인 좌표이다. 2..