-
8.4.금요일// 프로그래머스 복습과 재도전 & 코딧 강의TIL( Today I Learned) 2023. 8. 4. 22:52
그동안 허겁지겁 급급해서 문제를 제대로 풀었는지 심히 의심이 되어서, 다시 풀면서 정리 하고 있다.
그리고 코딧 강의 들었다.
풀었다고 아는게 아니었다.
Review 8.4
오늘 내가 새로 배운거
리스트 비교는 앞에 요소가 결정한다 가령[a,b,c]와 [가,나,다]의 대소 부등호의 참 거짓은 앞이 우선이다 , 맨 앞이 같다면 두번째가 우선이고 . 마지막 요소까지 이렇게 결정한다. <——날짜 비교하기
또 리스트 [가,나,다] 가 [a,b,c] 와 같다는 것은 모든 요소가 같다는 것이다. 순서도 같다는 것이다. <—— A로 B 만들기
- 한 번만 등장한 문자
문제 설명
문자열 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.append(str(k))
else:
pass
x.sort()
x1 =''.join(x)
return x
def solution(s):
x =[]
for k in s:
if s.count(str(k))==1:
x.append(str(k)). ==> x += [str(k)]
else:
pass
x1 = sorted(x). —# x.sort() 비교해보자 x.sort()는 원본을 나두고 한다? 메이비
x2 =''.join(x1)
return x2
다른 사람
def solution(s):
answer = "".join(sorted([ ch for ch in s if s.count(ch) == 1]))
return answer
x1 = sorted(x). —# x.sort() 비교해보자 x.sort()는 원본을 나두고 한다
sorted(x)와 x.sort() 비교. x.sort()는 원본변형, sorted(x)는 원본 유지 새로운것 창조 왜 ? Ed 를 붙여 그 말은 새로운게 늘었어
- 배열 만들기 5
문제 설명
문자열 배열 intStrs와 정수 k, s, l가 주어집니다. intStrs의 원소는 숫자로 이루어져 있습니다.
배열 intStrs의 각 원소마다 s번 인덱스에서 시작하는 길이 l짜리 부분 문자열을 잘라내 정수로 변환합니다. 이때 변환한 정수값이 k보다 큰 값들을 담은 배열을 return 하는 solution 함수를 완성해 주세요.
제한사항
- 0 ≤ s < 100
- 1 ≤ l ≤ 8
- 10l - 1 ≤ k < 10l
- 1 ≤ intStrs의 길이 ≤ 10,000
입출력 예
intStrs k s l result ["0123456789","9876543210","9999999999999"] 50000 5 5 [56789, 99999] 입출력 예 설명
입출력 예 #1
- idx에 따라 잘라낸 문자열과 그에 따른 ret의 변화를 표시하면 다음 표와 같습니다.
idx 잘라낸 문자열 ret 0 "56789" [56789] • 따라서 [56789, 99999]를 return 합니다.
내답
def solution(intStrs,k,s,l):
isr = intStrs
result = []
for strs in isr:
s1= int(strs[s:s+l])
if s1>k :
result += [s1]
return result
#배열 만들기 5
def solution(intStrs, k, s, l):
return [int(x[s:s+l] )for x in intStrs if int(x[s:s+l])>k]
다른 사람 풀이
def solution(intStrs, k, s, l):
return [int(intstr[s:s+l]) for intstr in intStrs if int(intstr[s:s+l]) > k]
def solution(intStrs, k, s, l):
answer = []
for x in intStrs:
if int(x[s:s+l])>k:answer.append(int(x[s:s+l]))
return answer
- 날짜 비교하기
-
문제 설명
정수 배열 date1과 date2가 주어집니다. 두 배열은 각각 날짜를 나타내며 [year, month, day] 꼴로 주어집니다. 각 배열에서 year는 연도를, month는 월을, day는 날짜를 나타냅니다.
만약 date1이 date2보다 앞서는 날짜라면 1을, 아니면 0을 return 하는 solution 함수를 완성해 주세요.
제한사항
- date1의 길이 = date2의 길이 = 3
입출력 예
date1 date2 result [2021, 12, 28] [2021, 12, 29] 1 [1024, 10, 24] [1024, 10, 24] 0 입출력 예 설명
입출력 예 #1
- date1이 date2보다 하루 앞서기 때문에 1을 return 합니다.
입출력 예 #2
- date1과 date2는 날짜가 서로 같으므로 date1이 더 앞서는 날짜가 아닙니다. 따라서 0을 return 합니다.
내답
def solution(date1, date2):
answer = 0
if date1[0]< date2[0]:
answer = 1
elif (date1[0]== date2[0]) and (date1[1] <date2[1]):
answer =1
elif (date1[0]== date2[0]) and (date1[1]==date2[1]) and (date1[2]<date2[2]):
answer =1
else:
answer =0
return answer
남의 답 // 어처구니가 없다
def solution(date1, date2):
return int(date1 < date2)
네, 맞습니다. 리스트 `[2, 110, 0]`과 `[2, 100, 18]`을 비교하면, 리스트의 두 번째 요소를 비교합니다. `110`은 `100`보다 크므로 `[2, 110, 0] > [2, 100, 18]`은 참입니다. 따라서 전체적으로 봤을 때, `[2, 110, 0]`이 `[2, 100, 18]`보다 크다고 판단됩니다.
int(date1 < date2) 여기서 int()를 쓴 이유
Python의 int() 함수는 값을 정수로 변환하는 데 사용됩니다. 부울 값(True 또는 False)을 int()에 전달하면 True는 1로, False는 0으로 변환됩니다.
따라서 제공된 solution() 함수에서 int(date1 < date2)는 date1이 date2 이전이면 1을 반환하고 그렇지 않으면 0을 반환합니다.
def solution(date1, date2):
for i in range(3):
if date1[i]<date2[i]:return 1
elif date2[i]<date1[i]: return 0
return 0
def solution(date1, date2):
answer = 0
a=int(str(date1[0])+str(date1[1])+str(date1[2]))
b=int(str(date2[0])+str(date2[1])+str(date2[2]))
if a<b:
answer+=1
else:
answer+=0
return answer
- 팩토리얼
문제 설명
i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 예를들어 5! = 5 * 4 * 3 * 2 * 1 = 120 입니다. 정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요.
- i! ≤ n
제한사항
- 0 < n ≤ 3,628,800
입출력 예
n result 3628800 10 7 3 입출력 예 설명
입출력 예 #1
- 10! = 3,628,800입니다. n이 3628800이므로 최대 팩토리얼인 10을 return 합니다.
입출력 예 #2
- 3! = 6, 4! = 24입니다. n이 7이므로, 7 이하의 최대 팩토리얼인 3을 return 합니다.
=* factorial
*
problem description
The i factorial (i!) means the product of integers from 1 to i. For example 5! = 5 * 4 * 3 * 2 * 1 = 120. Complete the solution function so that given an integer n, it returns the largest integer i that satisfies the following condition.
*i! ≤ n
Restrictions
* 0 < n ≤ 3,628,800
I/O example
n result
3628800 10
7 3
I/O Example Description
I/O example #1
* 10! = 3,628,800. Since n is 3628800, it returns 10, the maximum factorial.
I/O Example #2
* 3! = 6, 4! = 24. Since n is 7, it returns 3, which is the largest factorial less than or equal to 7.
*
translate this into english
ChatGPT
- Problem Description:
- Given an integer n, the task is to find the largest integer i such that i! (i factorial) is less than or equal to n.
- Constraints:
- 0 < n ≤ 3,628,800
- Input/Output Examples:
- Example 1:
- Input: n = 3628800
- Output: 10
- Explanation: The factorial of 10, denoted as 10!, is equal to 3,628,800. Since n is 3,628,800, the function should return 10, which is the maximum integer i that satisfies the condition i! ≤ n.
Example 2:
- Input: n = 7
- Output: 3
- Explanation: The factorial of 3, denoted as 3!, is equal to 6. The factorial of 4, denoted as 4!, is equal to 24. Since n is 7, the function should return 3, which is the largest integer i such that i! ≤ 7.
The solution function should be completed to achieve the above task.
def solution(n):
def factorial(i):
if i == 0 or i == 1:
return 1
return i * factorial(i - 1)
i = 0
while factorial(i) <= n:
i += 1
return i - 1
from math import factorial
def solution(n):
k = 10
while n < factorial(k):
k -= 1
return k
참고 채영씨 블로그에서 - 출처
def solution(n): <- 가장 생각하기 편한 논리이다
i = 1
factorial = 1
while factorial <= n:
i += 1
factorial *= i
return i-1
solution 함수는 입력으로 주어진 정수 n에 대해 n이 k! (팩토리얼 k)보다 크거나 같은 가장 큰 음이 아닌 정수 k를 찾는 것을 목표로 합니다.
코드를 단계별로 설명하겠습니다:
- solution 함수는 정수 n을 입력으로 받습니다.
- 변수 k를 10으로 초기화합니다. 이는 k의 시작값이며, 가장 큰 k를 찾기 위해 감소시킬 것입니다.
- while 루프는 n이 factorial(k) (팩토리얼 k)보다 작은 동안 실행됩니다. 음이 아닌 정수 k의 팩토리얼 k!은 1부터 k까지의 모든 양의 정수의 곱입니다.
- 루프 내에서 코드는 n이 factorial(k)보다 작은지 확인합니다. 만약 n이 실제로 factorial(k)보다 작다면, k가 너무 큰 것이므로 k를 감소시켜야 합니다.
- 루프는 매 반복마다 k의 값을 1씩 감소시킵니다 (k -= 1).
- 루프 조건 (n < factorial(k))이 False가 될 때까지, 현재 k 값에 대해 n이 k!보다 크거나 같다는 것을 의미합니다.
- 함수는 k의 값을 반환합니다. 이는 n이 k!보다 크거나 같다는 것을 나타낸다,// 그래서 n보다 작은 가장 큰 k를 나타냅니다.
The solution function aims to find the largest non-negative integer k such that n is greater than or equal to k! (the factorial of k).
Here's a step-by-step explanation of the code:
- The function solution takes an integer n as input.
- It initializes a variable k to 10. This will be the starting value for k, and we will try to decrease it to find the largest k.
- The while loop runs as long as n is less than factorial(k), which is the factorial of k. The factorial of a non-negative integer k (denoted as k!) is the product of all positive integers from 1 to k.
- Within the loop, the code checks if n is less than factorial(k). If n is indeed less than factorial(k), it means that k is too large, and we need to decrease it.
- The loop decreases the value of k by 1 in each iteration (k -= 1).
- When the loop condition (n < factorial(k)) becomes False, it means that n is greater than or equal to factorial(k) for the current value of k.
- The function then returns the value of k, which represents the largest k such that n is greater than or equal to k!.
Apologies for the confusion in my previous response. You are right; the expression k -= 1 is indeed valid in Python. It is a shorthand notation for updating the value of the variable k by subtracting 1 from its current value.
k -= 1 is equivalent to k = k - 1. It simply decrements the value of k by 1. This expression is a common and widely used construct in many programming languages, including Python.
So, in the context of the solution function, k -= 1 is used inside the while loop to decrement the value of k until the condition n < factorial(k) becomes false, i.e., until n is greater than or equal to factorial(k). It is a valid and effective way to find the largest non-negative integer k for the given n.
죄송합니다. 이전의 답변이 혼란스러웠습니다. 맞습니다. k -= 1 표현은 파이썬에서 유효합니다. 이것은 변수 k의 값을 현재 값에서 1을 빼서 업데이트하는 축약 표기법입니다.
k -= 1은 k = k - 1과 동일합니다. 이는 변수 k의 값을 1만큼 감소시킵니다. 이러한 표현은 파이썬을 포함하여 많은 프로그래밍 언어에서 자주 사용되는 구조입니다.
따라서 solution 함수의 맥락에서 k -= 1은 n이 k!보다 크거나 같아질 때까지 k의 값을 1씩 줄이기 위해 while 루프 내에서 사용됩니다. 이는 주어진 n에 대해 가장 큰 음이 아닌 정수 k를 찾는데 유효하고 효과적인 방법입니다.
def solution(n):
divider=0
while 1:
divider+=1
if n/divider < 1:
break
else:
n/=divider
return divider-1
이 solution 함수는 주어진 정수 n에 대해 팩토리얼의 최대 지수를 구하는 함수입니다.
코드를 단계별로 설명하겠습니다:
- solution 함수는 정수 n을 입력으로 받습니다.
- 변수 divider를 0으로 초기화합니다. 이 변수는 팩토리얼의 지수를 나타내는 값입니다.
- while 루프가 계속해서 반복됩니다. 루프는 divider 값을 1씩 증가시킵니다.
- 루프 내에서 if 조건문을 사용하여 n을 divider로 나눈 결과가 1보다 작을 때 루프를 종료합니다. 즉, n/divider가 1보다 작으면 더 이상 팩토리얼의 지수를 늘릴 필요가 없으므로 루프를 빠져나옵니다.
- 그렇지 않으면, n을 divider로 나누어서 n의 값을 갱신합니다. 이렇게 함으로써 팩토리얼의 지수를 하나씩 늘려가면서 n을 작아지게 만듭니다.
- while 루프가 종료되면, 팩토리얼의 지수를 나타내는 divider 값에서 1을 뺀 값을 반환합니다. 이렇게 함으로써 팩토리얼의 지수를 최대값으로 구합니다.
채영씨 블로그에서 - 출처
from math import factorial
def solution(n):
k = 10
while n < factorial(k):
k -= 1
return k
def solution(n):
i = 1
factorial = 1
while factorial <= n:
i += 1
factorial *= i
return i-1
def solution(n):
divider=0
while 1:
divider+=1
if n/divider < 1:
break
else:
n/=divider
return divider-1
- A로 B 만들기
-
문제 설명
문자열 before와 after가 매개변수로 주어질 때, before의 순서를 바꾸어 after를 만들 수 있으면 1을, 만들 수 없으면 0을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 0 < before의 길이 == after의 길이 < 1,000
- before와 after는 모두 소문자로 이루어져 있습니다.
입출력 예
before after result "olleh" "hello" 1 "allpe" "apple" 0 입출력 예 설명
입출력 예 #1
- "olleh"의 순서를 바꾸면 "hello"를 만들 수 있습니다.
입출력 예 #2
- "allpe"의 순서를 바꿔도 "apple"을 만들 수 없습니다.
내답
def solution(before, after):
an1 =[]
an =[]
for i in before:
an.append(i)
an.sort()
for i in after:
an1.append(i)
an1.sort()
if an ==an1:
return 1
else:
return 0
2차 내 답 - 답을 안보고 다시 풀어봤다
def solution(before, after):
b1 = sorted(before)
a1 = sorted(after)
if b1 == a1 :
return 1
else:
return 0
def solution(before, after):
return 1 if sorted(before)==sorted(after) else 0
- 이차원 배열 대각선 순회하기 -
- 배운거— 런타임오류/ 그리고 answer의 이해
문제 설명
2차원 정수 배열 board와 정수 k가 주어집니다.
i + j <= k를 만족하는 모든 (i, j)에 대한 board[i][j]의 합을 return 하는 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ board의 길이 ≤ 100
- 1 ≤ board[i]의 길이 ≤ 100
- 0 ≤ k < board의 길이 + board[i]의 길이
입출력 예
board k result [[0, 1, 2],[1, 2, 3],[2, 3, 4],[3, 4, 5]] 2 8 입출력 예 설명
입출력 예 #1
- 입출력 예 #1의 board를 표로 나타내면 다음과 같습니다.
i \ j 0 1 2 0 0 1 2 1 1 2 3 • i + j가 2보다 작거나 같은 항들의 합은 0 + 1 + 2 + 1 + 2 + 2 = 8이므로 8을 return 합니다
원래 답
def solution(board, k):
rows = len(board)
cols = len(board[0])
total_sum = 0
for i in range(rows):
for j in range(cols):
if i + j <= k:
total_sum += board[i][j]
return total_sum
다시 푼 답2
def solution(board, k):
answer = 0
n = len(board)
m = len(board[0])
for i in range(n):
for j in range(m):
if i + j <= k and i < n and j < m:
answer += board[i][j]
return answer
다시 푼답 오류 있어서 다시 했다 다시 1 런타임 오류 왜? K가 범위를 넘어서면 board가 읽어낼수 없다
def solution(board, k):answer = []
for i in range(k+1):
for j in range(k+1):
if i + j <= k:
answer += [board[I][j]] 이렇게 하거나 아님 answer = 0 으로 초기화 하고 answer += board[I][j] 해야한다
else:
pass
return sum(answer)
해당 코드에서 `board[i][j]`는 정수형(integer)이므로, 리스트(list)에 추가할 수 없습니다. `answer` 리스트에 정수형을 추가하려고 하기 때문에 'int' object is not iterable 오류가 발생합니다.
만약 `board[i][j]`를 리스트에 추가하려는 것이 목적이라면, `answer` 리스트를 다음과 같이 수정해야 합니다.
answer += [board[i][j]]
하지만, 만약 `board[i][j]`가 정수형을 반환해야 한다면, `answer` 리스트를 정수형으로 초기화한 후, `board[i][j]` 값을 더해줘야 합니다.
answer = 0
for i in range(k+1):
for j in range(k+1):
if i + j <= k:
answer += board[i][j]
else:
pass
return answer
'TIL( Today I Learned)' 카테고리의 다른 글
8.6.일요일 (0) 2023.08.06 8.5.토요일 (0) 2023.08.05 8.2.수요일 (0) 2023.08.02 8.1.화요일 (0) 2023.08.01 2023.7.31.월요일 : 코딧 강의와 프로그래머스 문제 (0) 2023.07.31