문자열 리스트 str_list에는 "u", "d", "l", "r" 네 개의 문자열이 여러 개 저장되어 있습니다. str_list에서 "l"과 "r" 중 먼저 나오는 문자열이 "l"이라면 해당 문자열을 기준으로 왼쪽에 있는 문자열들을 순서대로 담은 리스트를, 먼저 나오는 문자열이 "r"이라면 해당 문자열을 기준으로 오른쪽에 있는 문자열들을 순서대로 담은 리스트를 return하도록 solution 함수를 완성해주세요. "l"이나 "r"이 없다면 빈 리스트를 return합니다.
def solution(str_list):
for i in range(len(str_list)):
if str_list[i] == "l":
return str_list[:i]
elif str_list[i] == "r":
return str_list[i+1:]
return []
계속 65, 75점으로 실패하다가 코드 간단하게 수정했더니 이왜진 ...??
간단하게 생각해서
리스트에서 l이 있으면 그때의 인덱스 왼쪽 값 return
r이 있으면 그때 인덱스부터 오른쪽 값 return
둘다 아니면 빈 배열 리턴 ㅎㅎ;
간단한 문제에서 시간 빼앗긴 기분이라 허무하다
n번째 원소까지
문제 설명
정수 리스트 num_list와 정수 n이 주어질 때, num_list의 첫 번째 원소부터 n 번째 원소까지의 모든 원소를 담은 리스트를 return하도록 solution 함수를 완성해주세요.
def solution(num_list, n):
return num_list[:n]
n개 간격의 원소들
문제 설명
정수 리스트 num_list와 정수 n이 주어질 때, num_list의 첫 번째 원소부터 마지막 원소까지 n개 간격으로 저장되어있는 원소들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string의 앞의 n글자로 이루어진 문자열을 return 하는 solution 함수를 작성해 주세요.
def solution(my_string, n):
return my_string[:n]
접두사인지 확인하기
문제 설명
어떤 문자열에 대해서 접두사는 특정 인덱스까지의 문자열을 의미합니다. 예를 들어, "banana"의 모든 접두사는 "b", "ba", "ban", "bana", "banan", "banana"입니다.문자열 my_string과 is_prefix가 주어질 때, is_prefix가 my_string의 접두사라면 1을, 아니면 0을 return 하는 solution 함수를 작성해 주세요.
문자열 배열 intStrs와 정수 k, s, l가 주어집니다. intStrs의 원소는 숫자로 이루어져 있습니다.배열 intStrs의 각 원소마다 s번 인덱스에서 시작하는 길이 l짜리 부분 문자열을 잘라내 정수로 변환합니다. 이때 변환한 정수값이 k보다 큰 값들을 담은 배열을 return 하는 solution 함수를 완성해 주세요.
def solution(intStrs, k, s, l):
answer = []
for i in intStrs:
intList = list(i)
res = ''.join(intList[s:s+l])
if int(res) > k:
answer.append(int(res))
return answer
이것저것 형변환을 많이 사용한 것 같다. 생각해보니 리스트로 변환할 것 없이 문자열 자체를 슬라이싱하면 되는데 왜 리스트로 변환해서 슬라이싱 할 생각을 했지 . .ㅎㅎ
def solution(intStrs, k, s, l):
return [int(intstr[s:s+l]) for intstr in intStrs if int(intstr[s:s+l]) > k]
다른 사람 풀이 :
문자열을 바로 슬라이싱해서 int로 변환하고, 조건문으로 값이 k 이상인 값들만 뽑아냈다. 굿굿..
부분 문자열 이어 붙여 문자열 만들기
문제 설명
길이가 같은 문자열 배열 my_strings와 이차원 정수 배열 parts가 매개변수로 주어집니다. parts[i]는 [s, e] 형태로, my_string[i]의 인덱스 s부터 인덱스 e까지의 부분 문자열을 의미합니다. 각 my_strings의 원소의 parts에 해당하는 부분 문자열을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
def solution(my_strings, parts):
answer = ''
for i in range(len(my_strings)):
answer += my_strings[i][parts[i][0]:parts[i][1]+1]
return answer
my_strings와 parts의 길이가 같고, 같은 인덱스 안의 값들을 사용하는 것이므로 인덱스를 활용하려고 생각하며 풀었다.
한번에 풀려고 하지 않고 하나하나 해석하면서 푸니까 좀 더 빨리 풀리는 듯!
def solution(my_strings, parts):
answer = ""
for i, (s, e) in enumerate(parts):
answer += my_strings[i][s:e+1]
return answer
다른 사람의 좀 더 간단한 풀이, enumerate 함수도 잘 사용하면 유용한 것 같다.
문자열의 뒤의 n글자
문제 설명
문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string의 뒤의 n글자로 이루어진 문자열을 return 하는 solution 함수를 작성해 주세요.
def solution(my_string, n):
return my_string[-n:]
음수 인덱스 사용해서 문자열 뒤에서부터 슬라이싱 !
접미사 배열
문제 설명
어떤 문자열에 대해서 접미사는 특정 인덱스부터 시작하는 문자열을 의미합니다. 예를 들어, "banana"의 모든 접미사는 "banana", "anana", "nana", "ana", "na", "a"입니다.문자열 my_string이 매개변수로 주어질 때, my_string의 모든 접미사를 사전순으로 정렬한 문자열 배열을 return 하는 solution 함수를 작성해 주세요.
def solution(my_string):
return sorted([my_string[i:] for i in range(len(my_string))])
인덱스 0부터 +1씩 문자열 슬라이싱 > 사전순으로 정렬
접미사인지 확인하기
문제 설명
어떤 문자열에 대해서 접미사는 특정 인덱스부터 시작하는 문자열을 의미합니다. 예를 들어, "banana"의 모든 접미사는 "banana", "anana", "nana", "ana", "na", "a"입니다.문자열 my_string과 is_suffix가 주어질 때, is_suffix가 my_string의 접미사라면 1을, 아니면 0을 return 하는 solution 함수를 작성해 주세요.
def solution(my_string, is_suffix):
lst = [my_string[i:] for i in range(len(my_string))]
return 1 if is_suffix in lst else 0
방금 푼 물제에 조건문만 붙여서 접미사 배열 안에 해당 접미사가 있는지만 확인하여 1, 0 리턴
boolean 변수 x1, x2, x3, x4가 매개변수로 주어질 때, 다음의 식의 true/false를 return 하는 solution 함수를 작성해 주세요. (x1 ∨ x2) ∧ (x3 ∨ x4)
def solution(x1, x2, x3, x4):
return (x1 or x2) and (x3 or x4)
주사위 게임 3
문제 설명
1부터 6까지 숫자가 적힌 주사위가 네 개 있습니다. 네 주사위를 굴렸을 때 나온 숫자에 따라 다음과 같은 점수를 얻습니다.네 주사위에서 나온 숫자가 모두 p로 같다면 1111 × p점을 얻습니다.세 주사위에서 나온 숫자가 p로 같고 나머지 다른 주사위에서 나온 숫자가 q(p ≠ q)라면 (10 × p + q)2 점을 얻습니다.주사위가 두 개씩 같은 값이 나오고, 나온 숫자를 각각 p, q(p ≠ q)라고 한다면 (p + q) × |p - q|점을 얻습니다.어느 두 주사위에서 나온 숫자가 p로 같고 나머지 두 주사위에서 나온 숫자가 각각 p와 다른 q, r(q ≠ r)이라면 q × r점을 얻습니다.네 주사위에 적힌 숫자가 모두 다르다면 나온 숫자 중 가장 작은 숫자 만큼의 점수를 얻습니다.네 주사위를 굴렸을 때 나온 숫자가 정수 매개변수 a, b, c, d로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.
며칠 전에 풀었던 주사위 게임 풀이에서 set 함수로 중복된 값을 추리고 len 함수로 개수를 알아내 문제를 풀었던 기억이 있다. 이 방식으로 접근해보았을 때
p p p p > 1
p p p q > 2
p p q q > 2
p p q r > 3
p q r t > 4
> 값이 2로 동일할 때 어떻게 구분할 것인가?
> p p q r 일 때의 연산이 q * r 인데 어떤게 p,q,r을 어떻게 구분할 것인가? 의 문제가 생겼다 ..... 음
def solution(a, b, c, d):
answer = 0
lst = [a,b,c,d]
length = len(set(lst))
count = [lst.count(i) for i in lst]
if length == 1: answer = 1111 * a
elif length == 4 : answer = min(a,b,c,d)
elif length == 2:
if 3 in count:
p = [lst[index] for index, value in enumerate(count) if value == 3]
q = [lst[index] for index, value in enumerate(count) if value == 1]
answer = (10 * p[0] + q[0])**2
else:
answer = (a + c) * abs(a - c) if a == b else (a + b) * abs(a - b)
else:
answer_values = [lst[index] for index, value in enumerate(count) if value == 1]
answer = answer_values[0] * answer_values[1]
return answer
머리 쥐어짜내가며 짠 코드 ..뇌절코드.. 한시간 넘게 걸려서 짠......코드예요 ....
1. length가 2일 때
1-1. p p p q 인 경우 count가 3임
1-2. p p q q 인 경우, a==b면 c==d이기 때문에 어차피 값이 2개밖에 없으니 a,c를 p,q로 활용해서 연산
2. length가 3일 때, p p q r 인 경우
count값이 1 > q, r 을 구해야하므로
값이 1을 만족할 때의 인덱스를 사용해서 lst에서 값을 구함.
아우 어렵게도 짰다 그쵸 ..
암튼 [lst[index] for index, value in enumerate(count) if value == n] 이 코드를 위주로 생각해서 짰고,
value가 n을 만족할 때의 인덱스를 사용해서 값을 구한 것입니다!
def solution(a, b, c, d):
l = [a,b,c,d]
c = [l.count(x) for x in l]
print(c)
if max(c) == 4:
return 1111*a
elif max(c) == 3:
print(l[c.index(3)])a
return (10*l[c.index(3)]+l[c.index(1)])**2
elif max(c) == 2:
if min(c) == 1:
return eval('*'.join([str(l[i]) for i, x in enumerate(c) if x == 1]))
else:
return (max(l) + min(l)) * abs(max(l) - min(l))
else:
return min(l)
다른 사람 풀이:
애초에 4,3,2,1의 기준값을 나눈 것부터 나랑 달랐다.
나는 set을 기준으로 나누었는데 다른사람들은 count함수를 기준으로 나누었다.
다른 부분이 예를들어 p p p q 라면 set은 > p, q만남고 값이 2가 되는데
count를 사용해서 lst 배열대로 남겨두 [3, 3, 3, 1]이 되어 max(c)를 하였을 때 값이 3이 나온다.
이렇게 해야 뒤에서 인덱스를 구할 때 편해서 이 방법이 훨씬 ... 나은 것 같다.
내가 푼 방법은 하나하나 계산을 한 느낌이랄까 ....
count랑 index함수를 사용한 풀이를 제대로 처음본 것 같다.
c = [l.count(x) for x in l] : 리스트의 특정 원소 개수를 세서 c에 저장한다.
1. max(c) == 4일 때, 특정 원소 개수가 4개일 때 > 모두 같은 값
2. max(c) == 3일 때, 특정 원소 개수가 3개일 때 > 3개 같은 값, 1개만 다름
3. max(c) == 2일 때
3-1 min(c)는 1일 때 p p q r 인 경우
c의 값이 1일 때의 인덱스를 구해서 두 값을 곱함
3-2 p p q q 인 경우
값이 어차피 2개이니 list에서 최솟값과 최댓값을 이용해 p, q로 보고 계산
어려운데 .. 그래도 새로운 것을 알아가는 것 같아서 좋슴니다.
비록 제 시간은 훅.. 날아가버렸지만요 ㅠ
글자 이어 붙여 문자열 만들기
문제 설명
문자열 my_string과 정수 배열 index_list가 매개변수로 주어집니다. my_string의 index_list의 원소들에 해당하는 인덱스의 글자들을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
def solution(my_string, index_list):
return ''.join(my_string[i] for i in index_list)
9로 나눈 나머지
문제 설명
음이 아닌 정수를 9로 나눈 나머지는 그 정수의 각 자리 숫자의 합을 9로 나눈 나머지와 같은 것이 알려져 있습니다.이 사실을 이용하여 음이 아닌 정수가 문자열 number로 주어질 때, 이 정수를 9로 나눈 나머지를 return 하는 solution 함수를 작성해주세요.
문자열 my_string과 이차원 정수 배열 queries가 매개변수로 주어집니다. queries의 원소는 [s, e] 형태로, my_string의 인덱스 s부터 인덱스 e까지를 뒤집으라는 의미입니다. my_string에 queries의 명령을 순서대로 처리한 후의 문자열을 return 하는 solution 함수를 작성해 주세요.
def solution(my_string, queries):
for s, e in queries:
my_string = my_string.replace(my_string[s:e+1], my_string[s:e+1][::-1])
return my_string
인덱스 s~e 부분을 뒤집어서 replace함수로 대체하는 방법을 사용했는데, 반례가 계속 나와서 결국 방법을 바꿨다.
def solution(my_string, queries):
for s, e in queries:
my_string = my_string[:s] + my_string[s:e+1][::-1] + my_string[e+1:]
return my_string
replace 함수를 사용하지 않고 슬라이싱만 이용해서 s~e부분을 뒤집고 앞뒤로는 그대로 가져가기
문제들 난이도가 오락가락하는게 병주고 약주는 건가 ..... 주사위 문제에서 멘탈나갔는데 3,4,5는 그래도 순탄히 풀리고,, 이게 완전 기초일텐데 다른 건 얼마나 어려울까 .....ㅎㅎㅎㅎㅜㅜㅜ 어제 삼전 sw 어쩌고 신청을 해놔서 사전 문제 풀려고 봤는데 진짜 도저히 모르겠더라고요 ..... 그래두 꾸준히 해보자 아자잣