반응형

python 34

프로그래머스 - 푸드 파이트 대회 [Python]

https://school.programmers.co.kr/learn/courses/30/lessons/134240 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 안녕하세요, 오늘은 프로그래머스 '푸드 파이트 대회' 문제에 대한 Python 풀이를 소개하려 합니다. 해당 문제는 대회에서 선수들이 먹는 음식의 종류와 양을 공정하게 배치하는 문제입니다. 문제 이해 이 문제에서 주어진 입력은 음식의 양을 칼로리가 적은 순서대로 나타내는 정수 배열입니다. 우리의 목표는 대회를 위한 음식의 배치를 나타내는 문자열을 반환하는 것입니다. 대회의 공정성을 위해 두 선수..

프로그래머스 2023.06.12

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

프로그래머스 2023.06.09

백준 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

유클리드 호제법

안녕하세요. 오늘은 최대공약수를 찾는 효율적인 방법인 유클리드 호제법에 대해 함께 알아보도록 하겠습니다. 수학과 프로그래밍에서 많이 사용되는 이 알고리즘을 이해하고 활용한다면, 여러분의 문제 해결 능력을 한 단계 높일 수 있을 것입니다. 유클리드 호제법이란? 유클리드 호제법은 두 개의 자연수나 다항식의 최대공약수를 구하는 알고리즘입니다. 유클리드 호제법 : 두 자연수의 최대 공약수(GCD)를 구하는 알고리즘에 대해 설명드리겠습니다. 1. 최대 공약수(GCD)란 두 개 이상의 자연수의 공통된 약수 중 가장 큰 수를 말합니다. 2. 최소 공배수(LCM)은 두 개 이상의 자연수의 공통된 배수 중 가장 작은 수를 말합니다. 유클리드 호제법의 원리 유클리드 호제법의 기본 원리는 이렇습니다: "두 수 a, b (a..

알고리즘 2023.03.22

Python 함수 정리(계속 업데이트 예정)

몫, 나머지 함수 1. divmod() : 두개 숫자를 나누었을때 몫과 나머지 반환 # n을 2진수로 변환하는 예시코드 def to_binary(n): binary = '' while n > 0: n, remainder = divmod(n, 2) binary = str(remainder) + binary return binary # divmod(a, b) => (a//b, a%b) 와 같음 제곱수 함수 1. sqrt() : 제곱수 여부 판별, n이 제곱수인지 판별해 True or False 반환 import math def is_square(n): sqrt_n = int(math.sqrt(n)) return sqrt_n ** 2 == n # 사용 예시 print(is_square(16)) # True p..

Python 2023.03.22

백준 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
반응형