반응형

알고리즘 27

프로그래머스 - K번째수 [Python]

https://school.programmers.co.kr/learn/courses/30/lessons/42748 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 안녕하세요, 오늘은 프로그래머스 'K번째수'문제 풀이를 해보겠습니다. 문제 설명 'K번째수' 문제는 배열에서 특정 구간을 잘라내고 정렬했을 때 K번째로 나타나는 수를 찾는 문제입니다. 배열 array와 명령의 목록을 담은 2차원 배열 commands가 주어집니다. 각 쿼리는 세 숫자 [i, j, k]로 이루어져 있으며, 이는 array의 i번째 숫자부터 j번째 숫자까지 잘라낸 뒤 정렬했을 때, k..

프로그래머스 2023.06.12

프로그래머스 - 두개 뽑아서 더하기 [Python]

https://school.programmers.co.kr/learn/courses/30/lessons/68644 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 안녕하세요! 오늘은 프로그래머스 '두 개 뽑아서 더하기' 문제에 대해 살펴보겠습니다. 이 문제는 파이썬의 기본 자료구조와 조합(Combination)에 대한 이해가 필요한 문제입니다. 문제 설명 이 문제는 주어진 숫자 배열에서 임의의 두 수를 선택하여 더하고, 그 결과를 오름차순으로 정렬하여 출력하는 문제입니다. 여기서 주의할 점은 중복된 수를 선택하여 더하는 것은 허용하지 않고, 중복된 결과는 ..

프로그래머스 2023.06.11

프로그래머스 - 시저 암호 [Python]

https://school.programmers.co.kr/learn/courses/30/lessons/12926 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 안녕하세요, 오늘은 프로그래머스 '시저 암호' 문제에 대해 살펴보겠습니다. 문제 설명 먼저 문제의 요구사항을 이해해야 합니다. '시저 암호'는 어떤 문자열을 알파벳 순서로 일정한 거리만큼 밀어내어 새로운 문자열을 만드는 방식의 암호화 기법입니다. 예를 들어 "AB" 문자열이 주어지고, 1만큼 밀어내라는 명령이 있다면 결과는 "BC"가 됩니다. 만약 'Z' 문자가 주어지고 1만큼 밀어내라는 명령이 ..

프로그래머스 2023.06.10

프로그래머스 - 삼총사 [Python]

https://school.programmers.co.kr/learn/courses/30/lessons/131705 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 안녕하세요, 오늘은 '삼총사'라는 문제를 함께 살펴보려 합니다. 이 문제는 3개의 정수를 선택해서 합이 0이 되는 경우의 수를 찾는 문제로, 브루트 포스 방식을 이용해서 해결할 수 있습니다. 문제 설명 이 문제는 학교에 다니는 학생들이 각자 정수 번호를 가지고 있고, 이 중에서 3명의 학생의 정수 번호를 더했을 때 0이 되면 그 학생들을 '삼총사'라고 부르는 규칙을 가지고 있습니다. 우리의 목표..

프로그래머스 2023.06.09

프로그래머스 - 문자열 내 마음대로 정렬하기 [Python]

https://school.programmers.co.kr/learn/courses/30/lessons/12915 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 안녕하세요, 오늘은 프로그래머스의 '문자열 내 마음대로 정렬하기' 문제를 함께 풀어보려 합니다. Python을 이용해 풀어볼 텐데요, 이 문제는 문자열 정렬과 람다(lambda) 함수 사용법에 대해 깊이 이해할 수 있는 좋은 문제입니다. 문제 설명 이 문제는 주어진 리스트(strings)의 문자열들을 주어진 인덱스(n)에 위치한 문자를 기준으로 정렬하되, 그 문자가 같을 경우 문자열 전체를 비교하..

프로그래머스 2023.06.09

백준 1966번 - 프린터 큐 [Python]

https://www.acmicpc.net/problem/1966 1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net 안녕하세요! 오늘은 백준 1966번 프린터 큐 문제를 Python으로 풀이하는 방법에 대해서 정리해보려고 합니다. 이 문제는 큐 자료구조를 이용해 해결할 수 있는 문제입니다. 문제 이해 문제는 프린터의 출력 순서를 결정하는 알고리즘에 관한 것입니다. 문서의 중요도에 따라 출력 순서가 결정되며, 더 중요한 문서가 입력되면 앞서 대기하던 문서는 뒤로 밀리게 됩니다. 우리가 알아낼 것은 특정 문서가 언제 ..

BOJ 2023.06.07

백준 11659번 - 구간 합 구하기 4 [python]

Python 코드 n, m = map(int, input().split()) numbers = list(map(int, input().split())) sum = [0] tmp = 0 # 누적 합 구하기 for i in numbers: tmp = tmp + i sum.append(tmp) # 구간 합 구하기 for _ in range(m): i, j = map(int, input().split()) print(sum[j] - sum[i-1]) Python 코드 풀이 이번 문제는 구간 합을 구하는 문제입니다. N과 M의 최대 횟수는 각각 100,000이기 때문에 시간 복잡도를 고려해야 합니다. 완전 탐색 알고리즘으로 풀게 되면 시간 초과가 발생할 수 있습니다. 그래서 누적합 기법을 사용하여 합 배열을 미리..

BOJ 2023.04.03

[선택 알고리즘] - QuickSelect

알고리즘 설명 Quickselect 알고리즘은 k번째 원소를 찾는 알고리즘입니다. 일반적으로 정렬되지 않은 리스트에서 k번째로 작은 원소를 찾는 데 사용됩니다. 물론, 정렬된 리스트에서도 사용할 수 있습니다. 평균적으로 "O(n)"의 시간 복잡도를 가지며, 최악의 경우 "O(n^2)"의 시간 복잡도를 가집니다. 하지만 이런 경우는 매우 드뭅니다. 따라서 일반적인 정렬 알고리즘보다 효율적인 방법입니다. 알고리즘 동작 방식 1. 리스트에서 임의의 원소를 피벗으로 선택합니다. 2. 리스트를 피벗을 기준으로 분할하여, 피벗보다 작은 원소는 왼쪽, 큰 원소는 오른쪽에 위치시킵니다. 3. k번째로 작은 원소가 왼쪽에 위치해 있으면, 왼쪽 부분 리스트에서 Quickselect 알고리즘을 재수행합니다. 4. k번째로 ..

알고리즘 2023.04.03

백준 17608번 - 막대기 [python]

Python 코드 import sys def input(): return sys.stdin.readline().rstrip() n = int(input()) stack = [] # 막대기 높이 입력받아 stack에 저장 for _ in range(n): h = int(input()) stack.append(h) cnt = 0 # 보이는 막대기의 개수를 카운트하기 위해 초기화 max_h = 0 # 현재 기준으로 가장 높은 막대기의 높이를 저장하기 위해 초기화 # 스택 오른쪽부터 왼쪽끝까지 탐색해서 보이는 막대기 개수 카운트 for i in range(n-1, -1, -1): if stack[i] > max_h: cnt += 1 max_h = stack[i] print(cnt) #보이는 막대기 출력 Pyth..

BOJ 2023.03.18

백준 1436번 - 영화감독 숌 [python]

Python 코드 n = int(input()) # 입력값 N cnt = 0 # "666"이 들어가는 수 카운트 변수 num = 666 # 시작 숫자 while True: if "666" in str(num): # "666"이 들어가면 cnt += 1 # 카운트 증가 if cnt == n: # 카운트가 N과 같아지면 print(num) # 해당 숫자 출력 break # 반복문 종료 num += 1 # 다음 숫자로 이동 Python 코드 풀이 1. 코드에 대한 전체적인 풀이 "666"이 들어가는 숫자 중에서 N번째로 작은 수를 출력하는 문제에 대한 저의 해결 방법을 소개하겠습니다. 이 문제를 해결하려면 모든 수를 탐색하면서 "666"이 들어가는 수를 찾아야 합니다. 이를 위해 저는 브루트포스 알고리즘을 사..

BOJ 2023.03.18
반응형