본문 바로가기

PYTHON91

프로그래머스 Lv1 문자열 내림차순으로 배치하기(python) 문자열 내림차순으로 배치하기 풀이 문자열 대문자, 소문자를 하는데 대문자가 소문자보다 작은 것으로 간주해야 하니 아스키코드를 이용해서 해줘 봤다. # ord로 바꿔서 정렬해준뒤, 다시 chr()하기 # 대문자가 소문자 보다 작은 것으로 간주하니까 아스키코드 이용 def solution(s): tmp = [] for i in range(len(s)): tmp.append(ord(s[i])) tmp = sorted(tmp, reverse=True) answer = '' for j in range(len(tmp)): answer += chr(tmp[j]) return answer 다른 사람 풀이 다른 사람들은 더 간단하게 풀었다. 알아둬야겠다. 더 간단히 할 수 있었다니,,,, def solution(s): .. 2024. 1. 29.
프로그래머스 Lv1 같은 숫자는 싫어(python) 같은 숫자는 싫어 풀이 제목은 같은 숫자가 싫다고 하지만, 내용을 읽어보면 연속된 같은 숫자가 싫다는 것을 알 수 있다. 따라서 숫자가 연속된 것, 예시로 222212332211 이 있으면, 212321 이 돼야 한다는 것이다. 난 이방법을 stack의 방법과 엮어서 생각을 해보았고, 반쪽짜리 stack의 방식으로 진행했다. # 0 ~ 9까지의 숫자, 연속적으로 나타나면 하나만 남기기 # return 시 배열의 순서를 그대로 해야하므로 list(set(배열))은 안됨 # 반쪽자리 stack을 이용해보자 def solution(arr): stack = [-1] for i in range(len(arr)): if stack[-1] != arr[i]: stack.append(arr[i]) return stac.. 2024. 1. 29.
프로그래머스 Lv1 추억 점수(python) 추억 점수 풀이 사진별로 추억 점수를 매기는 문제인데, name, yearning, photo로 이름과 이름과 연결되는 점수, 사진 이 주어진다. 이때 사진에는 name에는 없는 사람들도 있다. 여기서 난 인덱스를 이용해서 photo에서 바로 찾아내는 방식을 사용할 수도 있었겠지만, 딕셔너리를 이용하는 게 더 바람직하다 생각되어서, 딕셔너리를 이용했다. 그 이후 photo를 반복문을 돌리면서 각 이름이 있는지 여부와 있으면 해당 점수를 더하는 방식으로 진행을 해보았다. # 사진별로 추억점수, 각 인물의 그리움 점수가 사진의 추억 점수 # name과 yearning은 상호연결되기에 dictionary를 이용 def solution(name, yearning, photo): # 상호 연결 match_name.. 2024. 1. 29.
프로그래머스 Lv2 다음 큰 숫자(python) 다음 큰 숫자 풀이 조건이 3개가 있다. n의 다음 큰 숫자는 n보다 큰 자연수입니다. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 개수가 같습니다. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수입니다. 몇 가지 방법을 생각해 봤지만, 제한 사항에 n 2024. 1. 29.
프로그래머스 Lv1 크기가 작은 부분 문자열 (python) 크기가 작은 부분 문자열 풀이 t의 길이는 p보다 크거나 같고, 숫자로 이루어진 문자 t중에서 p와 길이는 같지만 값은 p이하인 수의 갯수를 찾아내야한다. 그래서 슬라이싱을 이용해서 문제를 풀어보았다. # p와 같은 길이로, t 중 p보다 작거나 같은 숫자가 나오는 횟수를 return # len(t)-len(p)+1까지 for문을 돌리기 def solution(t, p): answer = 0 for i in range(len(t)-len(p)+1): # 길이가 p와 같은 녀석을 찾아야하니 슬라이싱 이용 if int(t[i:i+len(p)]) = int(t[i:i+len(p)]): answer += 1 return answer 2024. 1. 29.
SWEA D2 1859. 백만 장자 프로젝트 (python) 백만 장자 프로젝트 풀이 연속된 N일 동안 물건의 매매가를 알고 있고, 이를 이용해 미리 사고파는 작업을 하려 한다. 당국의 감시망에 걸리지 않기 위해 1만큼 구입하고, 판매는 구매 후 언제든 가능. 원재가 얻을 수 있는 최대이익을 구하도록 하자. 몇 가지 방법을 했었는데, 제한시간 초과로 통과하지 못했었다. 앞에서 하는 방법 때문에 문제가 있나 싶어서 뒤에서부터 검사하기로 했다. 우선 반복문으로 모든 일자를 역순으로 돌았다. 이때 가장 큰 값을 찾아내며 돌았고, 만약 가장 큰 값인 max_value보다 이번 일자의 값이 더 작다면 그것을 이득으로 계산하기로 했다. 이러니 시간 초과 없이 해결되었다. T = int(input()) for testcase in range(1,T+1): earn = 0 da.. 2024. 1. 29.