-
8.10.목요일 코딧 강의 & 프로그래머스 문제 복습TIL( Today I Learned) 2023. 8. 10. 23:03
허겁지겁 정신없이 풀었던 프로그래머스 문제를 다시 천천히 음미하면서 풀고 있다. 재미있다. 재미있다.
코딧 강의 아직도 웹 자동화 하고 있다. 많이 속도를 내야한다.
8.10
- 1.진료 순서 정하기
-
문제 설명
외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다.
정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 중복된 원소는 없습니다.
- 1 ≤ emergency의 길이 ≤ 10
- 1 ≤ emergency의 원소 ≤ 100
입출력 예
emergency result [3, 76, 24] [3, 1, 2] [1, 2, 3, 4, 5, 6, 7] [7, 6, 5, 4, 3, 2, 1] [30, 10, 23, 6, 100] [2, 4, 3, 5, 1] 입출력 예 설명
입출력 예 #1
- emergency가 [3, 76, 24]이므로 응급도의 크기 순서대로 번호를 매긴 [3, 1, 2]를 return합니다.
입출력 예 #2
- emergency가 [1, 2, 3, 4, 5, 6, 7]이므로 응급도의 크기 순서대로 번호를 매긴 [7, 6, 5, 4, 3, 2, 1]를 return합니다.
입출력 예 #3
- emergency가 [30, 10, 23, 6, 100]이므로 응급도의 크기 순서대로 번호를 매긴 [2, 4, 3, 5, 1]를 return합니다.
내가 한거
def solution(emergency):
b =sorted(a,reverse = True)
an1 =[]
for i in a:
an1.append(b.index(i)+1)
return an1
def solution(emergency):
# 응급도가 높은 순서대로 정렬
sorted_emergency = sorted(emergency, reverse=True)
# 해당 원소의 인덱스를 저장할 리스트 초기화
result = [0] * len(emergency)
# 각 원소의 인덱스 찾아서 저장
for i in range(len(emergency)):
result[i] = sorted_emergency.index(emergency[i]) + 1
return result
중요 남이 한거 ? 왜 딕셔너리 사용 - 난 낮선 부분
def solution(emergency):
answer = []
emer_ls = {e: i + 1 for i, e in enumerate(sorted(emergency)[::-1])}
이렇게 나온다 {100 : 1, 30: 2, 23: 3, 10:4, 6: 5} ,:딕셔너리 중요
for e in emergency:
answer.append(emer_ls[e])
return answer
이 코드는 'emergency'라는 리스트를 입력으로 받아 처리하는 함수인 'solution'을 정의하고 있습니다.
- emer_ls 딕셔너리 생성: 먼저, 주어진 'emergency' 리스트를 내림차순으로 정렬하고, 각 원소와 그 인덱스를 emer_ls 딕셔너리에 저장합니다. 이 때, 인덱스는 1부터 시작하는 순번으로 저장됩니다. 이렇게 하는 이유는 나중에 'emergency' 리스트의 각 원소에 해당하는 순번을 빠르게 찾을 수 있도록 하기 위함입니다.
- 'answer' 리스트 생성: 'emergency' 리스트를 반복하면서 각 원소에 대응하는 순번을 'emer_ls' 딕셔너리에서 찾아서 'answer' 리스트에 추가합니다.
- 'answer' 반환: 모든 'emergency' 원소에 대해 순번을 찾아 'answer' 리스트에 저장한 후, 최종적으로 'answer' 리스트를 반환합니다.
이 함수는 'emergency' 리스트 내 각 원소에 대해 해당하는 순번을 찾아 순번들을 담은 리스트를 반환하는 기능을 수행합니다.
- 2.간단한 논리 연산
문제 설명
boolean 변수 x1, x2, x3, x4가 매개변수로 주어질 때, 다음의 식의 true/false를 return 하는 solution 함수를 작성해 주세요.
- (x1 ∨ x2) ∧ (x3 ∨ x4)
입출력 예
x1 x2 x3 x4 result false true true true true true false false false false 입출력 예 설명
입출력 예 #1
- 예제 1번의 x1, x2, x3, x4로 식을 계산하면 다음과 같습니다.
(x1 ∨ x2) ∧ (x3 ∨ x4) ≡ (F ∨ T) ∧ (T ∨ T) ≡ T ∧ T ≡ T
따라서 true를 return 합니다.
입출력 예 #2
- 예제 2번의 x1, x2, x3, x4로 식을 계산하면 다음과 같습니다.
(x1 ∨ x2) ∧ (x3 ∨ x4) ≡ (T ∨ F) ∧ (F ∨ F) ≡ T ∧ F ≡ F
따라서 false를 return 합니다.
이전 보다는 좀 짧아 졌다.
def solution(x1, x2, x3, x4):
if(x1 or x2):
if(x3 or x4):
return True
else:
return False
else:
return False
이전것
def solution(x1, x2, x3, x4):
answer = True
if (x1 or x2) == True:
if (x3 or x4)== True:
answer = True
else:
answer =False
else:
answer =False
return answer
남의 것
def solution(x1, x2, x3, x4):
return (x1 | x2) & (x3 | x4)
- 3.문자열 반복해서 출력하기
문제 설명
문자열 str과 정수 n이 주어집니다.
str이 n번 반복된 문자열을 만들어 출력하는 코드를 작성해 보세요.제한사항
- 1 ≤ str의 길이 ≤ 10
- 1 ≤ n ≤ 5
a, b = input().strip().split(' ')
b = int(b)
print(a*b)
남의것
a, b = input().strip().split(' ')
for i in range(int(b)):
print(a, end = "")
- 4.1로 만들기
문제 설명
정수가 있을 때, 짝수라면 반으로 나누고, 홀수라면 1을 뺀 뒤 반으로 나누면, 마지막엔 1이 됩니다. 예를 들어 10이 있다면 다음과 같은 과정으로 1이 됩니다.
- 10 / 2 = 5
- (5 - 1) / 2 = 4
- 4 / 2 = 2
- 2 / 2 = 1
위와 같이 4번의 나누기 연산으로 1이 되었습니다.
정수들이 담긴 리스트 num_list가 주어질 때, num_list의 모든 원소를 1로 만들기 위해서 필요한 나누기 연산의 횟수를 return하도록 solution 함수를 완성해주세요.
제한사항
- 3 ≤ num_list의 길이 ≤ 15
- 1 ≤ num_list의 원소 ≤ 30
def solution_num_divi(num):
count = 0
while num != 1:
if num % 2 == 0:
num /= 2
else:
num -= 1
num /= 2
count += 1
return count
def solution(num_list):
count = 0
for num in num_list:
result = solution_num_divi(num)
count += result
return count
def solution(numlist):
def solution_num_cnt(num):
count =0
while num !=1:
if num%2 == 0:
num /= 2
else:
num -= 1
num /=2
count +=1
return count
result = 0
for num in numlist:
result += solution_num_cnt(num)
return result
def solution(num_list):
return sum(len(bin(i)) - 3 for i in num_list)
Best
def solution(num_list):
answer = 0
for n in num_list:
while n != 1:
n //= 2
answer += 1
return answer
- 5.한 번만 등장한 문자
문제 설명
문자열 s가 매개변수로 주어집니다.
s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록
solution 함수를 완성해보세요.
한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.
제한사항
- 0 < s의 길이 < 1,000
- s는 소문자로만 이루어져 있습니다.
입출력 예
s result "abcabcadc" "d" "abdc" "abcd" "hello" "eho" 입출력 예 설명
입출력 예 #1
- "abcabcadc"에서 하나만 등장하는 문자는 "d"입니다.
입출력 예 #2
- "abdc"에서 모든 문자가 한 번씩 등장하므로 사전 순으로 정렬한 "abcd"를 return 합니다.
입출력 예 #3
- "hello"에서 한 번씩 등장한 문자는 "heo"이고 이를 사전 순으로 정렬한 "eho"를 return 합니다.
def solution(s):
x =[]
for k in s:
if s.count(str(k))==1:
x += [str(k)]
else:
pass
x1 = sorted(x)
x2 =''.join(x1)
return x2
def solution(s):
an =''
for i in s:
if s.count(i) ==1 :
an += i
ans1 = list(an)
ans2 = sorted(ans1)
ans3 = ''.join(ans2)
return ans3
def solution(s):
answer = "".join(sorted([ ch for ch in s if s.count(ch) == 1]))
return answer
- 6.배열의 길이를 2의 거듭제곱으로 만들기
문제 설명
정수 배열 arr이 매개변수로 주어집니다. arr의 길이가 2의 정수 거듭제곱이 되도록 arr 뒤에 정수 0을 추가하려고 합니다.
arr에 최소한의 개수로 0을 추가한 배열을 return 하는 solution 함수를 작성해 주세요.
제한사항
- 1 ≤ arr의 길이 ≤ 1,000
- 1 ≤ arr의 원소 ≤ 1,000
입출력 예
arr result [1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6, 0, 0] [58, 172, 746, 89] [58, 172, 746, 89] 입출력 예 설명
입출력
예 #1
** 예제 1번의 arr의 길이는 6입니다. arr의 길이를 2의 정수 거듭제곱으로 만드는 방법은 0을 2개, 10개, 26개,...,
추가하는 방법이 있고 그중 최소한으로 0을 추가하는 방법은 2개를 추가하는 것입니다. 따라서 [1, 2, 3, 4, 5, 6, 0, 0]을 return 합니다.
입출력 예 #2
** 예제 2번의 arr의 길이는 4이고 이미 2의 정수 거듭제곱입니다. 따라서 뒤에 0을 추가하지 않아도 되므로 [58, 172, 746, 89]를 return 합니다.
def solution(arr):
z2 =[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
#print(z2)
n=len(arr)
#print(n)
#for i,vl in enumerate(arr):
# j = i+1
#print(j)
# print(j,vl)
count = 0
for i in z2: #2의 제곱수들을 반복해서 왜 그래야 i 랑 len(arr)이랑 비교
if n > i: # 5>1 (1), 2(2), 4(3),,,8
count +=1
else:
break
result = count
diff = 2**(count) - n
for _ in range(diff):
arr +=[0]
return arr
새로 내가 한거 // 저번 보다 잘 풀었다
def solution(arr):
nar = len(arr)
idx = 0
while nar > 2**idx:
idx +=1
a = (2**idx ) - nar
for _ in range(a):
arr += [0]
return arr
남의 답
def solution(arr):
a = 1
b = len(arr)
while a < b :
a *= 2
return arr + [0] * (a-b)
- 7.문자열이 몇 번 등장하는지 세기
-
문제 설명
문자열 myString과 pat이 주어집니다. myString에서 pat이 등장하는 횟수를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ myString ≤ 1000
- 1 ≤ pat ≤ 10
입출력 예
myString pat result "banana" "ana" 2 "aaaa" "aa" 3 입출력 예 설명
입출력 예 #1
- "banana"에서 1 ~ 3번 인덱스에서 한 번, 3 ~ 5번 인덱스에서 또 한 번 "ana"가 등장해서 총 두 번 등장합니다. 따라서 2를 return 합니다.
입출력 예 #2
- "aaaa"에서 0 ~ 2번 인덱스에서 한 번, 1 ~ 3번 인덱스에서 한 번, 2 ~ 4번 인덱스에서 한 번 "aa"가 등장해서 총 세 번 등장합니다. 따라서 3을 return 합니다.
내가 새로 푼거
def solution(myString,pat):
count =0
lnpt = len(pat)
for i in range(len(myString)):
if myString[i:i+lnpt] == pat:
count +=1
return count
예전거
def solution(myString, pat):
num = len(pat)
count = 0
for i in range(len(myString)):
if myString[i:i+num] == pat:
count +=1
return count
다른 사람
def solution(myString, pat):
answer = 0
for i, x in enumerate(myString) :
if myString[i:].startswith(pat) :
answer += 1
return answer
- 8.세 개의 구분자
문제 설명
임의의 문자열이 주어졌을 때 문자 "a", "b", "c"를 구분자로 사용해 문자열을 나누고자 합니다.
예를 들어 주어진 문자열이 "baconlettucetomato"라면 나눠진 문자열 목록은 ["onlettu", "etom", "to"] 가 됩니다.
문자열 myStr이 주어졌을 때 위 예시와 같이 "a", "b", "c"를 사용해 나눠진 문자열을 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
단, 두 구분자 사이에 다른 문자가 없을 경우에는 아무것도 저장하지 않으며, return할 배열이 빈 배열이라면 ["EMPTY"]를 return 합니다.
제한사항
- 1 ≤ myStr의 길이 ≤ 1,000,000
입출력 예
myStr result "baconlettucetomato" ["onlettu", "etom", "to"] "abcd" ["d"] "cabab" ["EMPTY"] 입출력 예 설명
입출력 예 #1
- 문제 설명의 예시와 같습니다.
입출력 예 #2
- "c" 이전에는 "a", "b", "c" 이외의 문자가 없습니다.
- "c" 이후에 문자열 "d"가 있으므로 "d"를 저장합니다.
- 따라서 ["d"]를 return 합니다.
입출력 예 #3
- "a", "b", "c" 이외의 문자가 존재하지 않습니다. 따라서 저장할 문자열이 없습니다.
- 따라서 ["EMPTY"]를 return 합니다.
연습
ls =[]
ms =''
for i in "kbeauti":
if i not in ["a", "b", "c"]:
ms += i
else:
if ms:
ls.append(ms)
ms =''
if ms:
ls.append(ms)
print(ls)
이전거
def solution(myStr):
# Initialize variables
result = []
current_str = ""
delimiters = {"a", "b", "c"}
# Loop through each character in the input string
for char in myStr:
if char in delimiters:
if current_str:
result.append(current_str)
current_str = ""
else:
current_str += char
# Append the last substring (if any)
if current_str:
result.append(current_str)
# Check if the result list is empty and return ["EMPTY"] in that case
if not result:
result = ["EMPTY"]
return result
새로 한거
def solution(myStr):
ls =[]
ms =''
for i in myStr:
if i not in ['a','b','c']:
ms += i
else:
if ms:
ls.append(ms)
ms = ''
if ms:
ls.append(ms)
else: —> if not ls:
if ms=="" and ls==[]: —> 이것 하나로 된다
ls = ["EMPTY"] ls = ["EMPTY"]
return ls return ls
'TIL( Today I Learned)' 카테고리의 다른 글
8.12.토요일 잭팟스터디, 문제 풀이 & 미니강의 (1) 2023.08.12 8.11.금요일 (0) 2023.08.11 8.9.수요일 / 아침에 일어나서 도서관 간 날 // 7시 10분 부터 공부 시작 (1) 2023.08.10 8.8.화요일 (0) 2023.08.08 8.7.월요일 코딧 강의 , 프로그래머스 복습 (0) 2023.08.07