일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Spring
- 백준 19238
- 웹어플리케이션 서버
- 백준 16719
- 백준 17626
- re.split
- springboot
- 백준
- JPA
- 백준 16235
- 백준 15685
- Coroutine
- spring security
- sql 기술면접
- MSA
- 백준 17779
- 백준 16236
- MySQL
- Kotlin
- JVM
- 백준 파이썬
- spring oauth
- 프로래머스
- java
- with recursive
- spring cloud
- 프로그래머스
- Spring Boot
- 파이썬
- java 기술면접
- Today
- Total
목록알고리즘/백준 (90)
시작이 반
구현문제이다. 일정이 이렇게 있다면 코팅지를 붙여야 하는 영역은 이 부분이다. 즉 겹치는 부분의 row최대와 col의 최대를 구하고 곱해준다음 결과값에 계속 더해준다. 우선 2차원 배열로 캘린더를 만들어줬다. 해당 col의 row를 먼저 확인하고 다 확인했으면 다음 col로 넘어간다. row의 최대값을 구한다. col은 날짜가 넘어갈때마다 1씩 더해준다. 해당 일에 일정이 있어야한다. row 값 2일 일때 : 1 3일 일때 : 1 4일 일때 : 2 5일 일때 : 3 6일 일때 : 3 7일 일때 : 2 8일 일때 : 2 9일 일때 : 2 10일에는 일정이 없다. 일정이 없을때는 이전까지 구한 row 와 col을 계산해준다. row x col = 3 x 8 = 24 11일 일때 : 1 12일 일때 : 2 r..
구현문제이다. 처음 구현한 방법은 2차원 배열을 사용하여 해당명령을 수행하고 명령을 다 수행했으면 2차원 배열들을 문자열로 바꿔 ( ex: [[1, 0, 0, 1], [0, 1, 1, 0]] -> [ '1001, '0110' ] ) 모든 기차들을 다 비교하였다. -> 시간초과 두번째 방법은 비트 연산을 사용하여 명령을 수행하였고 visited[False] 배열을 사용하여 중복 값을 체크하였다. import sys input = sys.stdin.readline n, m = map(int, input().split(' ')) trains = [0] * (n + 1) commands = [list(map(int, input().split(' '))) for _ in range(m)] visited = [Fa..
t = int(input()) def turn45(n, d, graph: list): n -= 1 count = abs(d) // 45 minus = False if d 가운데열 prev_temp = graph[i][(n + 1) // 2] graph[i][(n + 1) // 2] = prev_list[i] prev_list[i] = prev_temp for i in range(n + 1): ..
구현 문제이다. 오목을 승리한 돌과 오목을 형성한 돌들의 맨 왼쪽 돌을 출력하는 문제이다. 우선 첫행 ~ 마지막행 순으로 검사를 한다. 열은 왼쪽에서 오른쪽으로 검사한다. 가로 검사 1. 해당 좌표에서 오른쪽으로 4칸을 확인하며 같은 돌인지 확인 2. 오목을 형성했다면 다음 한칸에도 같은 돌이 아닌지 확인 3. 해당 좌표에서 이전 좌표(왼쪽 1칸)가 같은돌이 아닌지 확인 세로, 오른쪽 대각선 아래, 오른쪽 대각선 위도 똑같이 확인 풀긴 했는데 코드가 너무 더럽다... 다시 풀어보자 graph = [list(map(int, input().split(' '))) for _ in range(19)] def whoWin(x, y): color = graph[x][y] rowCnt = 0 nx, ny = None..
구현 문제이다. 문제의 그림처럼 그대로 풀었다. 여기서 겉의 사각형부터 맨 안쪽의 사각형까지 몇번 들어가야 하는지 고민했는데 제한 조건에 min(N, M) mod 2 = 0 이란 조건이 있었다. 즉 min(N, M)를 2로 나눈 값만큼 안으로 들어가면된다. 배열을 돌리는 방법은 바꿀 좌표를 계산하고 그 좌표의 값을 저장해놓고 이전 좌표의 값을 계산된 좌표의 값에 넣는 식으로 계산하였다. 이러한 순서로 계산하였다. 하나의 사각형을 다 돌렸으면 안쪽 사각형으로 들어간다. n, m, r = map(int, input().split(' ')) graph = [list(map(int, input().split(' '))) for _ in range(n)] for _ in range(r): for i in rang..
구현 문제이다. 한글 자음에 해당하는 영어는 왼손으로 누르고 한글 모음에 해당하는 영어는 오른손으로 누른다. 즉 현재 누를 글자의 좌표를 왼손으로 누를지 오른손으로 누를지 정한다. 만약 e이기 때문에 왼손으로 누른다면 e의 해당 좌표를 구하고 이전 글자의 좌표와 거리를 계산한다. 누른 시간 1초 + 거리를 계산하며 결과값을 구해간다. left, right = input().split() strings = list(input()) keyboard = ['qwertyuiop', 'asdfghjkl', 'zxcvbnm'] mo = 'yuiophjklbnm' xl, yl, xr, yr = None, None, None, None for i in range(len(keyboard)): if left in keyb..
문자열, 사전을 활용한 문제 . 을 기준으로 문자를 나눠서 확장자를 key로 사전에 등록한다. 사전을 정렬한다. key를 기준으로 정렬하는 방법 dict = {'A' :1,'D' :4,'C' :3,'B' :2} sdict= sorted(dict.items()) # items() 함수는 key-value 쌍이 tuple로 구성된 리스트가 리턴됩니다. #>> [('A', 1), ('B', 2), ('C', 3), ('D', 4)] value를 기준으로 정렬하는 방법 dicts = {'A' :4,'D' :1,'C' :2,'B' :3} sdicts= sorted(dicts.items(), key=lambda x: x[1]) # items() 함수는 key-value 쌍이 tuple로 구성된 리스트가 리턴됩니다...
구현 문제이다. 남자일 경우 받은 숫자의 배수의 스위치를 반전시킨다. 여자일 경우 받은 숫자의 대칭되는 스위치를 반전시킨다. ex) 번호 1 2 3 4 5 6 7 8 스위치 0 1 0 1 1 1 1 0 일떄 받은 숫자가 6이라면 0 1 0 1 0 0 0 0 이된다. 구현은 쉽다. 하지만 출력 형식이 20개씩 잘라서 출력하는 것임을 명심하자! n = int(input()) switch = list(map(int, input().split(' '))) students = int(input()) receive_n = [tuple(map(int, input().split(' '))) for _ in range(students)] # 1: 남, 2: 여 for i in range(students): if rece..