
문제 접근 방법이 매우매우 수학적이라서 신선하기도 하고... 이걸 못푼 것에 대해 현타도 와서...^^ 충격받은 마음으로 문제 접근 방법을 정리해보고자 한다. 문제는 다음 링크를 클릭하면 확인할 수 있다. https://programmers.co.kr/learn/courses/30/lessons/62048 코딩테스트 연습 - 멀쩡한 사각형 가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을 programmers.co.kr 첫 번째 접근 방법 import math def solution(w,h): total = w * h # 가로: w, 세로: h # ..
정답코드 N, M = map(int, input().split()) BRD = [] for n in range(N): BRD.append(list(input())) count = 0xffffffff for i in range(N-8+1): for j in range(M-8+1): # W로 시작하는 경우 countW = 0 # B로 시작하는 경우 countB = 0 for x in range(i, i+8): for y in range(j, j+8): # x+y가 홀수일 경우 시작점과 달라야한다. if (x+y) % 2: if BRD[x][y] == 'W': # W일 경우 시작점이 W일 때 문제가 됨 countW += 1 elif BRD[x][y] == 'B': countB += 1 else: if BRD[..
정답코드 def solution(msg): # 1. 계속해서 문자열을 만든다. # 2. 만든 문자열이 dict에 있다면 idx만 1 추가해주고 pass # 3. dict에 없다면 마지막 문자 제외한 문자는 있는 것이므로 해당하는 idx 추가하고 pass answer = [] Dict = {chr(64 + i) : i for i in range(1, 27)} idx = 0 search = "" baseNumber = 27 while idx < len(msg): # search 업데이트 search += msg[idx] print(search) if search in Dict: idx += 1 else: # Dict에 정보 추가 Dict[search] = baseNumber baseNumber += 1 an..
프로그래머스에 나와있는 2020년 카카오 인턴십 기출문제인 키패드 누르기이다. 왼손 엄지와 오른손 엄지만 사용하여서 번호판을 누르는데, 1, 4, 7 일 때는 왼손 엄지로 3, 6, 9 일 때는 오른손 엄지로, 2, 5, 8, 0 일 때는 왼손 엄지 or 오른손 엄지 중 거리가 가까운 손가락으로 눌러야 한다. 만약 거리가 같을 경우, 오른손 잡이 -> 오른손/ 왼손 잡이 -> 왼손으로 눌러야 한다. 거리를 구하는 과정에서 피타고라스를 사용해서 문제를 풀었는데, 정답률이 55%가 나왔다. 문제에 "엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당합니다." 라고 적혀있기 때문에, 거리를 구할 때 피타고라스가 아니라, x의 이동 칸수 + y의 이동 칸수로 구해줘야..

프로그래머스에서 해시 -> 마지막 문제인 "베스트앨범"이다. 각 장르별로 인기있는 음악을 2개씩 골라서 베스트앨범을 만드는 문제이다. 다음과 같은 전략을 이용하여 풀었다. 1. 장르별로 총 plays 합을 구해서 장르별 인기순 배열을 만든다. 2. 만든 배열을 탐색하면서 각 장르별로 play수가 많은 순 + play 수가 같은 경우 고유번호(idx)가 작은 순으로 정렬한다. 3. 정렬한 배열에서 2개씩 꺼내는데, 여기서 총 1개만 있을 경우도 있기 때문에 조건문을 따로 만들어주었다. (무조건 2개씩 꺼내면 런타임에러가 뜬다.) 배열 정렬하는 것은 lamda를 사용하였다. genres_cnt2.sort(key=lambda x : (-x[0], x[1])) 이 부분을 보면, "genres_cnt2 배열을 정..

프로그래머스에 DFS/BFS -> 3번째 문제인 "단어 변환" 이다. 주어진 단어들만을 돌면서 begin -> target으로 가는 경로 중 최단 경로의 길이를 구하는 문제이다. 주어진 단어들로만 변경이 가능하고, 한 글자만 다를 경우에만 change가 가능하다. def solution(begin, target, words): answer = 0 min_cnt = 0xffff if target not in words: return 0 def dfs(cur, cnt): nonlocal min_cnt # 최소 cnt보다 현재 cnt가 더 큰 경우, 더 볼 필요가 없어지므로 return if min_cnt < cnt: return # cnt가 words의 길이보다 클 경우 이미 모든 경로를 탐색하게 된 것이므..

프로그래머스의 코딩테스트 연습 -> DFS/BFS 문제 중 마지막 문제인 "여행경로" 이다. "ICN"으로 무조건 시작해서 모든 도시를 지나는 경로들 중 알파벳 순서로 되어있는 경로를 구하면 된다. 먼저, 모든 도시를 지나는 경로들 중 알파벳 순서로 먼저인 경로를 구하기 위해서 tickets 배열을 sort 해주었다. 그래야 for문을 돌 때 순서대로 돌 수 있기 때문이다. def solution(tickets): answer = [] s = ["ICN"] visited = [0] * len(tickets) def dfs(cur, visited, tickets, state): nonlocal answer if len(state) == len(tickets) + 1: answer = state return..
- Total
- Today
- Yesterday
- 네트워크
- dfs
- 코테
- 4계층
- 운영체제
- cs
- 인텔리제이
- 백준
- DP
- 브루트포스
- SQLD
- 소셜로그인
- 완전탐색
- SQL
- intellij
- 동적프로그래밍
- 프로그래머스
- IPv4
- 파이썬
- OS
- BFS
- 5397
- Network
- C++
- 알고리즘
- Python
- cs공부
- 코딩테스트
- allauth
- 다대다매핑
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |