목록알고리즘 (19)
개발계발
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/U0uoL/btsGR315t3Z/hFxDZcnBXo3KAYH6hNKr5K/img.png)
문제 설명 제한사항 접근방식 - 안전지역을 표시할 2차원배열 생성 - board의 모든 원소를 검사 - board의 원소가 1이면 만들어놓은 2차원배열의 동,서,남,북, 대각선을 모두 위험지역으로 표시 - 생성한 2차원배열의 안전지역 count해서 반환 풀이 코드 def solution(board): answer = 0 n = len(board) safe_board = [[0] * n for _ in range(n)] directions = [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)] for i in range(n): for j in range(n): if board[i][j] == 1: safe_board[i][j] = ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/drXKXj/btsGRKulRSC/YxfRZBVUo5jnV08KlXc4Xk/img.png)
문제 설명 제한사항 접근방식 - denom1, denom2의 최소공배수를 구함 - 배열에 분자 * (최소공배수 / 분모)끼리 더한 값과, 최소 공배수를 담아 반환 풀이 코드 def gcd(a, b): while b != 0: a, b = b, a % b return a def lcm(a, b): return a * b // gcd(a, b) def solution(numer1, denom1, numer2, denom2): lcm_value = lcm(denom1, denom2) adjusted_numer1 = numer1 * (lcm_value // denom1) adjusted_numer2 = numer2 * (lcm_value // denom2) total_numer = adjusted_numer1 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/ctkCFp/btsGO992Iqn/gf9V3e97fWqbE57uAe3Xhk/img.png)
문제 설명 제한 사항 접근 방식 - polynomial을 "+"기준으로 split - x와 상수를 분리 - x끼리 더하고 상수끼리 더함 - 형식에 맞게 출력 풀이 코드 def solution(polynomial): answer = "" divide = polynomial.split(" + ") num_x = 0 num = 0 for i in divide: if 'x' in i: # 변수x가 있으면 plus = i.split('x')[0] # x를 기준으로 나눈뒤 첫번째 값을 추출(계수) if plus == '': # 첫번째 값이 비어있는 경우에는 계수가 1임 num_x += 1 else: # 1이 아닌 경우 num_x += int(plus) else: # 변수 x가 없는 경우(상수) num += int(..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cZxxJY/btsGO8pIXD2/hqR7c0kQdoCdeHr1cVRqak/img.png)
문제 설명 제한사항 접근 방식 - numlist의 각 원소에서 n을 뺀 절대값을 포함한 2차원 배열 생성 - 생성한 배열의 절대값과 크기를 기준으로 정렬 풀이 코드 def solution(numlist, n): answer = [] # 절대값을 포함해 정렬할 2차원 배열 sorted_by_n = [] # numlist의 값을 절대값을 포함해 추가 for num in numlist: sorted_by_n.append([num, abs(num-n)]) # 절대값을 기준으로 정렬, 절대값이 같다면 -x[0]을 기준(num의 크기, 내림차순)으로 정렬 sorted_by_n.sort(key = lambda x : (x[1], -x[0])) for num in sorted_by_n: answer.append(num..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bjVNv4/btsGLuk6WOo/EVLwxeOkwuDkAK0LwiFzpK/img.png)
문제 설명 https://school.programmers.co.kr/learn/courses/30/lessons/120875 제한사항 처음 접근 방식(틀린 코드) 한 점으로부터 다른 모든 점에 선을 연결하고 모든 기울기를 비교 def solution(dots): answer = 0 inclination = [] for i in range(3): for j in range(i+1, 4): tmp = abs((dots[j][1] - dots[i][1])) / abs((dots[j][0] - dots[i][0])) if tmp in inclination: answer = 1 break inclination.append(tmp) return answer -> 코드 실행 시 2가지 test case는 통과하나,..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bAe4dH/btsGabN6rw1/Rvyp1LnldeCofHpttdjMY1/img.png)
스택 연속된 메모리에서 후입선출(LIFO)방식의 자료구조로 데이터를 넣는 작업을 푸시, 꺼내는 작업을 팝이라고 한다. 위에서 연속된 메모리라고 했는데, 스택 자료구조의 가장 기본적인 구현체인 리스트를 이용해 코드를 확인해보자. 아래 코드를 실행해보면, stk = [] stk.append(0) stk.append(1) stk.append(2) stk.append(3) stk.append(4) print(id(stk)) print(id(stk[0])) print(id(stk[1])) print(id(stk[2])) print(id(stk[3])) print(id(stk[4]))아래와 같은 결과가 나오는데, 4309557504 4308494608 4308494640 4308494672 4308494704 43..