1. 코딩테스트 연습 - 특이한 정렬 | 프로그래머스 스쿨 (programmers.co.kr)
문제 설명
정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요.
나의 풀이
.
모범 답안
def solution(numlist, n):
return sorted(numlist,key = lambda x: [abs(x-n),-x])
▶ 코드 해석
1. n과 가까운 수부터 정렬하기 위해 abs()를 이용해 절댓값으로 오름차순 정렬한다.
2. 절댓값이 붙으면 -를 붙여 더 큰 수 앞에 오도록 한다.
ex) 5와 3
· 5-4=1 이고 3-4=-1이다. (절댓값 1로 동일)
· -를 붙이면 -5와 -3이 되며 -5가 더 작은 수이기 때문에 5가 먼저 answer에 들어간다.
3. sorted()를 이용해 numlist를 정렬한다.
★ 특정한 key를 기준으로 정렬
key 매개변수 사용 (sorted + lambda)
ex) 문자열의 길이를 기준으로 정렬
my_list = ["api", "app", "carrier", "demon", "aaa"]
sorted_list = sorted(my_list, key=len)
print(sorted_list)
['api', 'app', 'aaa', 'demon', 'carrier']
ex) 길이를 기준으로 정렬하고 오름차순 정렬
my_list = ["api", "app", "carrier", "demon", "aaa"]
sorted_list = sorted(my_list, key= lambda x : (len(x), x))
print(sorted_list)
[python] sorted(), sort(), key 사용법 (velog.io)
2. 코딩테스트 연습 - 다항식 더하기 | 프로그래머스 스쿨 (programmers.co.kr)
문제 설명
한 개 이상의 항의 합으로 이루어진 식을 다항식이라고 합니다. 다항식을 계산할 때는 동류항끼리 계산해 정리합니다. 덧셈으로 이루어진 다항식 polynomial이 매개변수로 주어질 때, 동류항끼리 더한 결괏값을 문자열로 return 하도록 solution 함수를 완성해보세요. 같은 식이라면 가장 짧은 수식을 return 합니다.
나의 풀이 (실패 정확성 91.7%)
def solution(polynomial):
xsum=0
nsum=0
poly=polynomial.split(" + ")
for i in poly:
if "x" in i:
if i=="x":
i="1x"
xsum+=int(i[:-1])
else:
xsum+=int(i[:-1])
else:
nsum+=int(i)
if nsum==0:
return str(xsum)+"x"
elif xsum==0:
return str(nsum)
elif xsum==1:
return "x + "+str(nsum)
return str(xsum)+"x + "+str(nsum)
모범 답안
def solution(polynomial):
xnum = 0
const = 0
for c in polynomial.split(' + '):
if c.isdigit():
const+=int(c)
else:
xnum = xnum+1 if c=='x' else xnum+int(c[:-1])
if xnum == 0:
return str(const)
elif xnum==1:
return 'x + '+str(const) if const!=0 else 'x'
else:
return f'{xnum}x + {const}' if const!=0 else f'{xnum}x'
접근 방법은 동일하나 조건을 더 추가
★ ★ 3. 코딩테스트 연습 - 코드 처리하기 | 프로그래머스 스쿨 (programmers.co.kr)
문제 설명
문자열 code가 주어집니다.
code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다. mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.
mode는 0과 1이 있으며, idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다.
- mode가 0일 때
- code[idx]가 "1"이 아니면 idx가 짝수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
- code[idx]가 "1"이면 mode를 0에서 1로 바꿉니다.
- mode가 1일 때
- code[idx]가 "1"이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
- code[idx]가 "1"이면 mode를 1에서 0으로 바꿉니다.
문자열 code를 통해 만들어진 문자열 ret를 return 하는 solution 함수를 완성해 주세요.
나의 풀이
.
모범 답안
def solution(code):
answer = ''
mode = 0
for i in range(len(code)):
if code[i] == '1':
mode ^= 1
else:
if i % 2 == mode:
answer += code[i]
return answer if answer else 'EMPTY'
★ ^= 는 비트연산자 중 xor을 뜻함. 두 비트가 서로 같으면 0 다르면 1
따라서 mode가 0이면 결과는 1이 되고, 1이면 같기 때문에 0이 됨
4. 코딩테스트 연습 - [PCCE 기출문제] 1번 / 출력 | 프로그래머스 스쿨 (programmers.co.kr)
5. 코딩테스트 연습 - 문자열 출력하기 | 프로그래머스 스쿨 (programmers.co.kr)
6. 코딩테스트 연습 - 최빈값 구하기 | 프로그래머스 스쿨 (programmers.co.kr)
★ 풀이 참고
def solution(array):
while len(array) != 0:
for i, a in enumerate(set(array)):
array.remove(a)
if i == 0: return a
return -1
7. 코딩테스트 연습 - [PCCE 기출문제] 8번 / 창고 정리 | 프로그래머스 스쿨 (programmers.co.kr)
8. 코딩테스트 연습 - 배열 조각하기 | 프로그래머스 스쿨 (programmers.co.kr)
나의 풀이
def solution(arr, query):
for i in range(len(query)):
if i%2==0:
arr=arr[:query[i]+1]
else:
arr=arr[query[i]:]
return arr
풀이 참고
def solution(arr, query):
for k, q in enumerate(query):
if k % 2 == 0:
arr = arr[:q + 1]
else:
arr = arr[q:]
return arr
9. 코딩테스트 연습 - OX퀴즈 | 프로그래머스 스쿨 (programmers.co.kr)
10. 코딩테스트 연습 - [PCCE 기출문제] 8번 / 창고 정리 | 프로그래머스 스쿨 (programmers.co.kr)
'코딩테스트 > programmers (python)' 카테고리의 다른 글
20240112/ programmers/ 1단계/ python/O (0) | 2024.01.12 |
---|---|
20240111/ programmers/ 0단계/ python (1) | 2024.01.11 |
20240109/ programmers/ 0단계/ python (1) | 2024.01.09 |
20240108/ programmers/ 0단계/ python (0) | 2024.01.08 |
20240107/ programmers/ 0단계/ python (1) | 2024.01.08 |