본문 바로가기

알고리즘103

자동차 평균 대여 기간 구하기 https://school.programmers.co.kr/learn/courses/30/lessons/157342 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 대여기간 1일부터 2일까지 빌리면 2일 동안 빌린 상태이기 때문에 끝-시작 +1 을 해줘야한다 평균이니까 avg 를 써서 평균기간을 구해 7보다 큰 값들만 가져온다 정렬은 오름차순 그대로 내림차순 desc SELECT CAR_ID,round(avg(END_DATE-START_DATE)+1,1) AVERAGE_DURATION from CAR_RENTAL_COMPANY_RENTAL_HISTORY g.. 2023. 6. 4.
조건에 맞는 사용자와 총 거래금액 조회하기 https://school.programmers.co.kr/learn/courses/30/lessons/164668 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 서브쿼리를 사용해서 총금액이 90만 이상인 사람의 정보만 가져오고 그 정보로만 조인을 해서 원하는 조건의 값만 나오도록 조인을 한다 select a.USER_ID,a.NICKNAME,b.price as TOTAL_SALES from USED_GOODS_USER a ,(select WRITER_ID ,sum(price) as price from USED_GOODS_BOARD where STATUS.. 2023. 6. 3.
조건에 맞는 사용자 정보 조회하기 https://school.programmers.co.kr/learn/courses/30/lessons/164670 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 3건 이상이기 때문에 group by를 사용했을 때 2보다 크다고 조건을 넣어주고 그 조건에 해당하는 아이디만 가져온다 주소를 합치는 건 공백을 넣어주고 ||를 사용하여 문자열을 합친다 전화번호도 마찬가지인데 중간에 - 가 들어가야 하므로 슬라이싱을 해서 -를 넣어주고 다시 합친다 select USER_ID,NICKNAME , CITY ||' '|| STREET_ADDRESS1 ||' '|| S.. 2023. 6. 2.
조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 https://school.programmers.co.kr/learn/courses/30/lessons/164671 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 두 개의 테이블을 조인한 다음 서브 쿼리를 사용해 뷰가 가장 많은 게시물을 가져온다 내림차순이기 때문에 desc 를 써주면 끝 SELECT '/home/grep/src/'||a.BOARD_ID||'/'||a.FILE_ID||a.FILE_NAME||a.FILE_EXT FILE_PATH from USED_GOODS_FILE a ,USED_GOODS_BOARD b where a.BOARD_ID=b.B.. 2023. 6. 1.
할인 행사 https://school.programmers.co.kr/learn/courses/30/lessons/131127?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아이템과 갯수가 쌍으로 묶이니까 해쉬테이블인 딕셔너리 사용 10개씩 한 구간으로 잡아서 슬라이딩 윈도우를 사용한다 원소가 추가되면 키값에 해당하는 갯수를 하나 증가시키고 빠지는 값은 감소시킨다 매번 실행할때 두개의 딕셔너리가 같을때의 갯수를 세면 답 증가하는건 want -1 일때 1을 증가시키면 want 의 갯수가 되니까 want-1 이랑 같은때 두 원소가 같다고 .. 2023. 5. 31.
1463.1로 만들기 https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 이게 왜 DP 인지 생각하다가 DP처럼 재귀를 사용하니까 풀렸다 경우의 수를 구하면 한번 내려갈때마다 3을 곱해서 3의 제곱 형태지만 재귀를 사용하면 메모라이즈 해당칸의 값은 기억하고 있어서 다시 계산할 필요가 없다 대표적으로 피보나치 수열에서 사용하는 방식과 동일하다 각각 3가지 경우로 나눠서 값을 찾아가면 된다 def f(x): if x==1: return 0 a=b=c=40 if x%3==0: if t[x//3]: c=t[x//3] else: c=f(x//3) if x%2==0 : if t[x//2]: b.. 2023. 5. 30.
DP 다이나믹 프로그래밍 중 하나 리스트의 값이 점점 커지기 떄문에 답이 나머지를 출력하는거라면 중간에 계속 나눠준다 수의 크기가 작아지기 때문에 그게 더 빠르다 더하기라서 가능 곱하기면 더 큰수로 나눠야함 n1=1000000 a=[0]*n1 b=[0]*n1 c=[0]*n1 c1=[0]*n1 c2=[0]*n1 c3=[0]*n1 a[0]=c[0]=b[0]=c2[0]=1 mi=10**7 for n in range(1,n1): a[n]=(a[n-1]+b[n-1]+c[n-1])%mi b[n]=(b[n-1]+c2[n-1])%mi c3[n]=(c2[n-2]-c3[n-1])%mi c2[n]=(b[n]-c3[n])%mi c1[n]=(c[n-2]-c1[n-1])%mi c[n]=(a[n]-c1[n])%mi #a[n-3]=b[n.. 2023. 5. 28.
2259. Remove Digit From Number to Maximize Result https://leetcode.com/problems/remove-digit-from-number-to-maximize-result/description/ Remove Digit From Number to Maximize Result - LeetCode Can you solve this real interview question? Remove Digit From Number to Maximize Result - You are given a string number representing a positive integer and a character digit. Return the resulting string after removing exactly one occurrence of digit from n.. 2023. 5. 27.
2260. Minimum Consecutive Cards to Pick Up https://leetcode.com/problems/minimum-consecutive-cards-to-pick-up/ Minimum Consecutive Cards to Pick Up - LeetCode Can you solve this real interview question? Minimum Consecutive Cards to Pick Up - You are given an integer array cards where cards[i] represents the value of the ith card. A pair of cards are matching if the cards have the same value. Return the minimum n leetcode.com 두 개의 같은 값 주 .. 2023. 5. 26.
347. Top K Frequent Elements https://leetcode.com/problems/top-k-frequent-elements/ Top K Frequent Elements - LeetCode Can you solve this real interview question? Top K Frequent Elements - Given an integer array nums and an integer k, return the k most frequent elements. You may return the answer in any order. Example 1: Input: nums = [1,1,1,2,2,3], k = 2 Output: [1,2] leetcode.com 가장 많이 나오는 원소 2개 가져오기 일반적으로 딕셔너리를 사용해 원소를 카.. 2023. 5. 25.
숫자 게임 python https://school.programmers.co.kr/learn/courses/30/lessons/12987 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr b 팀은 모든 걸 알고 있다 순서대로 b의 가장 낮은 점수가 a의 가장 낮은 점수와 싸우면 된다 a 가장 낮은 점수 보다 더 작다면 이건 점수를 얻을 수 없으니까 패배한다 그리고 그다음 순서가 a의 가장 작은 값과 비교하고 만약 b가 더 크다면 a도 다음 사람으로 넘어간다 이런 식으로 정렬해서 한 명씩 비교하면 간단하게 풀린다 def solution(a, b): a.sort() b.sort() n.. 2023. 5. 24.
가장 긴 팰린드롬 python https://school.programmers.co.kr/learn/courses/30/lessons/12904 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 팰린드롬의 특성은 대칭이다 모든 시작점에서 팰린드롬이 가능한 건 모두 조사한다 현재 자리에서 양옆으로 퍼져나가면서 두 값이 같다면 이건 대칭이니까 팰린드롬이다 이런 식으로 한쪽이 문자열의 끝까지 가거나 다른 값이 나올 때까지 진행한다 멈추었을 때 반복한 회수가 팰린드롬길이 이다 팰린드롬 길이가 홀수일 때와 짝수일 때 방법이 약간 다른데 홀수일 때는 현재 자리 현재의 양옆 그 양옆 순서를 숫자로 표.. 2023. 5. 23.
기지국 설치 python https://school.programmers.co.kr/learn/courses/30/lessons/12979 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 일단 기지국 영향을 안 받는 구간을 구한다 그리고 그 구간을 2*w+1로 나눈 몫과 나머지가 있다면 1을 더해준다 구간의 길이가 5 w가 1이라면 5의 길이에 최대로 배치했을 때 1개가 양옆으로 1씩이니 3을 커버할 수 있고 그러면 최소 2개는 필요하다 def solution(n, t, w): a=s=0 t.append(n+w+1) for i in t: b=i-w s+=((b-a-1)//(2*w+.. 2023. 5. 22.
스킬트리 - python https://school.programmers.co.kr/learn/courses/30/lessons/49993 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 스킬 트리의 순서대로 스킬을 찍어야 하니까 스킬 찍는 순서를 앞에서부터 하니씩 가져올 때 만약 이 스킬이 스킬 트리에 포함되어 있다면 가장 앞에 있는 스킬이어야 한다. 만약 ab 가 스킬 트리이고 bc 가 스킬을 찍는 순서라면 b는 a를 찍은 다음 배울 수 있으니까 불가능하고 ac는 가능하다 이런 식으로 가장 처음 원소가 일치하면 그다음원 소 일치하면 그다음원 소 그런 식으로 계속 일치해야 가능하.. 2023. 5. 20.
24. Swap Nodes in Pairs - python https://leetcode.com/problems/swap-nodes-in-pairs/ Swap Nodes in Pairs - LeetCode Can you solve this real interview question? Swap Nodes in Pairs - Given a linked list, swap every two adjacent nodes and return its head. You must solve the problem without modifying the values in the list's nodes (i.e., only nodes themselves may be chan leetcode.com 노드를 순회 하면서 2개씩 리스트에 넣고 2개가 채워지면 다시 리스트에 넣어 이중 리스.. 2023. 5. 19.
H-Index https://school.programmers.co.kr/learn/courses/30/lessons/42747 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 일단 이런 망할 설명의 문제따위는 누가만드는건지 문제의 답은 쉽다 내림차순 정렬해서 원소의 인덱스 번호가 원소의 값보다 작으면 그값이 h-index다 가장 마지막에 있는 값이 마지막에 업데이트 되니까 신경 안써도 된다 문제를 이해하는게 어려운 문제 def solution(c): c=sorted(c)[::-1] n=0 for i in range(len(c)): if c[i] >=i+1: n=i+1 .. 2023. 5. 18.
수식 최대화 https://school.programmers.co.kr/learn/courses/30/lessons/67257 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 가지 연산자만 있으므로 6가지 경우의 수를 모두 계산하여 가장 큰 값 리턴 연산자 우선순위는 문자열 나누는 split 함수를 사용한다 가장 늦게 연산하는 연산자부터 나누어서 2번 나누고 eval 함수를 사용하면 가장 첫 번째 연산자 계산 그다음 리스트에 담아져있는 수들은 연산자가 없으므로 split 한 문자를 가져와 경우에 따라 *+- 중 하나로 연산해 준다 이런 방식으로 하면 eval ->ff-.. 2023. 5. 17.
1721. Swapping Nodes in a Linked List - python https://leetcode.com/problems/swapping-nodes-in-a-linked-list/ Swapping Nodes in a Linked List - LeetCode Can you solve this real interview question? Swapping Nodes in a Linked List - You are given the head of a linked list, and an integer k. Return the head of the linked list after swapping the values of the kth node from the beginning and the kth node from t leetcode.com 링크드 리스트 앞에서 k 번 원소와 뒤에.. 2023. 5. 16.
2502.떡 먹는 호랑이 python https://www.acmicpc.net/submit/2502/60629260 로그인 www.acmicpc.net 시작 값을 모르는 피보나치수열의 n 번째 값이 주어진다 피보나치수열의 시작을 미지수 x, y 라 하면 x, y, x+y ,x+2y, 2x+3y ... 이런 식으로 미지수 앞에 계수가 피보나치수열의 값으로 진행한다 그러면 n을 아니까 n 번 진행시켜 계수 a와 b를 구하고 ax+by=m 방정식을 풀어야 하는데 n과 m 은 주어지고 a와 b는 다른 방법으로 구할 수 있으니 x 와 y만 구하면 된다 y=(m-ax)/b인 데 수열의 값은 정수이므로 m-ax 가 b로 나누어떨어지는 값을 구하면 된다 1부터 시작해서 n,m=map(int,input().split()) a=0 b=1 for i in r.. 2023. 5. 15.
11726. 2×n 타일링 python https://www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 어쩌다 보니 이 수열의 패턴이 1 2 3 5 8 13 21.... 으로 나아간다 그런데 이건 피보나치 수열 이럴수가 피보나치 수열을 구하자 a=0 b=1 for i in range(int(input())): a,b=b,a+b print(b%10007) 2023. 5. 14.
조건에 부합하는 중고거래 상태 조회하기 https://school.programmers.co.kr/learn/courses/30/lessons/164672 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 날자를 문자로 바꿔서 특정 날자를 조회하고 한 열에 데이터를 바꿔야해서 case 문을 사용한다 데이터의 유니크한 개수가 적으면 case 보다 decode 가 편하다 select BOARD_ID,WRITER_ID,TITLE,PRICE, case STATUS when 'SALE' then '판매중' when 'RESERVED' then '예약중' when 'DONE' then '거래완료' end a.. 2023. 5. 13.
혼자서 하는 틱택토 https://school.programmers.co.kr/learn/courses/30/lessons/160585 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 어디선가 들어본 틱 택 토 게임 일단 조건이 1 x 가 o 보다 많으면 안 된다 2 o는 x+1 개보다 많으면 안 된다 3 x는 무조건 한 줄만 생겨야 한다 4 o는 1줄과 2줄 가능하지만 2줄일 때는 o는 5 개 x는 4개여야 한다 이 조건들을 조합해서 가능한 경우를 만들어준다 가능하면 1 불가능하면 0 def solution(t): def f(x): y=0 s1=0 s2=0 for i in .. 2023. 5. 12.
11053.가장 긴 증가하는 부분 수열 https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 이게 원래 dp 동적 프로그래밍을 사용해야 하는 거 같지만 어쨌든 이렇게 풀었다 가장 위에서부터 점점 커지는 게 몇 개 있는지 체크한다 이미 체크가 끝난 자리는 개수를 기억해놔서 다시 지나가면 바로 알려주게 한다 가장 뒤에는 1개 그 앞에는 작아지면 2개 커지면 다시 1개 이런 식으로 해도 근데 n*n 복잡도이다 l=i.. 2023. 5. 11.
59. Spiral Matrix II - python https://leetcode.com/problems/spiral-matrix-ii/ Spiral Matrix II - LeetCode Can you solve this real interview question? Spiral Matrix II - Given a positive integer n, generate an n x n matrix filled with elements from 1 to n2 in spiral order. Example 1: [https://assets.leetcode.com/uploads/2020/11/13/spiraln.jpg] Input: n = 3 O leetcode.com 이전 나선형 문제에서 난이도 상승 이건 n이 주어지면 나선형 행렬을 반환한다 이전 문제와 같은 방법.. 2023. 5. 10.
54. Spiral Matrix - python https://leetcode.com/problems/spiral-matrix/description/ Spiral Matrix - LeetCode Can you solve this real interview question? Spiral Matrix - Given an m x n matrix, return all elements of the matrix in spiral order. Example 1: [https://assets.leetcode.com/uploads/2020/11/13/spiral1.jpg] Input: matrix = [[1,2,3],[4,5,6],[7,8,9]] Outpu leetcode.com 정처기가 생각나는 Spiral.. 행렬의 원소를 나선형으로 리스트에 담아 리턴한다 한쪽 .. 2023. 5. 9.
1572. Matrix Diagonal Sum - python https://leetcode.com/problems/matrix-diagonal-sum/description/ Matrix Diagonal Sum - LeetCode Can you solve this real interview question? Matrix Diagonal Sum - Given a square matrix mat, return the sum of the matrix diagonals. Only include the sum of all the elements on the primary diagonal and all the elements on the secondary diagonal that are leetcode.com 행렬의 대각 합을 모두 더하는데 x 형태로 더한다 같은 칸은 중복해.. 2023. 5. 8.
2606.바이러스 python https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net bfs 를 사용한 간단하다 딕셔너리로 어디에서 어디가 이어지는지 만들고 재귀함수로 방문 가능한곳을 모두 집합에 넣어서 그 집합의 크기가 바이러스 퍼지는 크기다 d={} input() n=int(input()) for i in range(n): i=list(map(int,input().split())) d.setdefault(i[0],set()) d.setdefault(i[1],set()) d[i[0]].. 2023. 5. 6.
1874.스택 수열 python https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 언제 한번 풀어본 거 같다 스택을 이용해서 주어진 수를 출력할 때 현재 스택의 마지막 값이 그 수가 아니면 그 수가 나올 때까지 리스트에서 추가한다 그래도 안 나오면 그 스택을 불가능한 출력 가능한 출력이라면 반복문이 끝나고 스택에 원소가 없어야 한다 n=int(input()) t=[] t1=list(range(1,.. 2023. 5. 5.
1564.팩토리얼5 python https://www.acmicpc.net/problem/1564 1564번: 팩토리얼5 첫째 줄에 정수 N이 주어진다. N은 1,000,000보다 작거나 같다. 또, 9보다 크거나 같다. www.acmicpc.net 가장 뒤에 0을 제외하고 5자리를 가져로는 문제다 그냥 팩토리얼 계산하면 수가 커져서 뒤에 자리만 계산하면서 나간다 아마도 5자리만 가져오면 곱할때 더 앞에 있는 숫자가 영향을 미치는걸 제거하니까 모든 영향을 받게하기위해 12 개를 가져옴 s=1 n=int(input()) for i in range(1,n+1): s*=i s=int(str(s).rstrip("0")[-12:]) print(str(s)[-5:]) 2023. 5. 4.
2215. Find the Difference of Two Arrays 두개의 리스트가 주어지면 교집합을 제거하고 남은 리스트를 리턴한다 class Solution: def findDifference(self, nums1: List[int], nums2: List[int]) -> List[List[int]]: return [list(set(nums1)-set(nums2)),list(set(nums2)-set(nums1))] 2023. 5. 3.