230729 오프라인 스터디 & 프로그래머스 문제풀기
오늘은 오프라인 스터디날 ~!~
힘차게 가보자고 ~!~~

* n번째 원소까지 문제를 풀었는데
문제는 '정수 리스트 num_list와 정수 n이 주어질 때, num_list의 첫 번째 원소부터 n 번째 원소까지의 모든 원소를 담은 리스트를 return하도록 solution 함수를 완성해주세요.' 이다.
나는 처음에
def solution(num_list,n):
answer= []
for i in range(0,n):
answer.append(num_list[i])
return answer
이렇게 문제를 풀었다.
근데 다시 생각해보니
def solution(num_list, n):
return num_list[:n]
이렇게 풀 수 있는 문제였다.
간단하게 코드 짜는 연습을 하기 좋은듯하당 ~
오프라인 스터디를 하면서 각자 문제를 풀다가 1시간안에 문제를 얼마나 풀건지 목표 문제 수를 정하고 그 뒤에 피드백을 하기로 했다 !
그래서 나는 10문제를 풀겠다고 했고, 실제로 푼 문제수는 9문제였다 !
* 1시간 목표 문제 풀이한 문제들
>> flag에 따라 다른 값 반환하기 / 문자열의 앞의 n글자 / 문자열의 뒤의 n글자 / n보다 커질 때까지 더하기 / 조건에 맞게 수열 변환하기 3 / n의 배수 / 카운트 업 / 공백으로 구분하기 1 / 마지막 두 원소
* 문자열의 뒤의 n글자에서
문제는 '문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string의 뒤의 n글자로 이루어진 문자열을 return 하는 solution 함수를 작성해 주세요.' 이다.
처음 내가 짠 코드는
def solution(my_string,n):
for i in (len(my_string) - len(my_string) -n):
return my_string[i]
이런 코드였고, 동작하지 않았다 ㅜ
그래서 고민하다가 GPT를 사용해서 문제를 해결해똬 . . .
def solution(my_string,n):
return my_string[-n:]
이렇게 쉽게 풀 수 있었는덱 !!!!!
머리를 굴리자 ㅠ 화이팅 .. ㅠ
* 조건에 맞게 수열 변환하기 3 문제에서
문제는 '정수 배열 arr와 자연수 k가 주어집니다. 만약 k가 홀수라면 arr의 모든 원소에 k를 곱하고, k가 짝수라면 arr의 모든 원소에 k를 더합니다. 이러한 변환을 마친 후의 arr를 return 하는 solution 함수를 완성해 주세요.' 이다.
나는
def solution(arr,k):
answer = []
for i in arr:
if k % 2 == 1:
answer.append(i*k)
else:
answer.append(i+k)
return answer
이렇게 문제를 풀었다.
이 문제를 스터디원들과 같이 피드백을 하면서
def solution(arr, k):
return [i*k if k%2!=0 else i+k for i in arr]
이렇게 간략화를 시켰다 !
리스트 컴프리헨션을 했다고 볼 수 있다 !
그리고 저 k%2 != 0은 그냥 k%2라고 써도 된다 !
* n의 배수 문제에서
문제는 ' 정수 num과 n이 매개 변수로 주어질 때, num이 n의 배수이면 1을 return n의 배수가 아니라면 0을 return하도록 solution 함수를 완성해주세요.' 이다.
나는
def solution(num,n):
return 1 if num % n == 0 else 0
이렇게 했는데
def solution(num, n):
return int(not(num % n))
이 풀이와
def solution(num, n):
return int(num % n == 0)
이 풀이도 정답이었다.
첫번째 다른 풀이는 num을 n으로 나누었을 때 나머지가 0이 아니면 not 연산자를 사용하여 False로 바꾸고, int() 함수를 사용하여 False를 0으로 변환한다. 만약 나머지가 0이라면 not 연산자를 사용하여 True로 바꾸고, int() 함수를 사용하여 True를 1로 변환한다. 그래서 같은 맥락의 코드인 것이다.
그리고 두번째 다른 풀이는 num을 n으로 나누었을때 나머지가 0이면 True니까 1을 return하는것이고, 나머지가 1이면 False니까 0을 return하게 된다.
* 카운트 업 문제에서
문제는 '정수 start와 end가 주어질 때, start부터 end까지의 숫자를 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.' 이다.
내가 처음 짠 코드는
def solution(start,end):
answer = []
for i in range(start,end+1):
answer.append(i)
return answer
이렇다.
이를 간략화하면
def solution(start, end):
return list(range(start, end + 1))
이렇게 할 수 있었다.
그리고 스터디원들이랑 리스트 컴프리헨션을 만든 코드는
def solution(start,end):
return [ i for i in range(start,end+1) ]
이렇다 !
스터디원들과 또 1시간 목표 문제 풀이를 하였고,
나는 또 목표 문제수를 10문제로 잡았다 !
실제로 푼건 7문제였다 !
*두번째 1시간 목표 문제 풀이한 문제들
>> 정수 찾기 / 글자 이어 붙여 문자열 만들기 / 문자열 곱하기 / 원소들의 곱과 합 / 길이에 따른 연산 / 문자열 붙여서 출력하기 / 접두사인지 확인하기
* 정수 찾기 문제에서
문제는 '정수 리스트 num_list와 찾으려는 정수 n이 주어질 때, num_list안에 n이 있으면 1을 없으면 0을 return하도록 solution 함수를 완성해주세요.' 이다.
나는
def solution(num_list,n):
return 1 if n in num_list else 0
이렇게 코드를 짰는데,
def solution(num_list, n):
return int(n in num_list)
이렇게 해도 되나보다 ..!
이제 True / False로 결과값이 나올 수 있는 문제들은 int를 잘 활용해서 바로 값이 나올 수 있게 코드를 짜봐야겠다 !
* 글자 이어 붙여 문자열 만들기 문제에서
문제는 '문자열 my_string과 정수 배열 index_list가 매개변수로 주어집니다. my_string의 index_list의 원소들에 해당하는 인덱스의 글자들을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.' 이다.
처음에는
def solution(my_string,index_list):
for i in index_list:
return my_string[i]
을 했는데 답이 안나왔다 ㅠ ㅠ
그래서 GPT의 도움을 받아
def solution(my_string,index_list):
return ''.join(my_string[i] for i in index_list)
코드 완성 !
join()함수 이용이 익숙해 지게 만들어야겠다 !
* 원소들의 곱과 합 문제에서
문제는 '문자열 my_string과 정수 배열 index_list가 매개변수로 주어집니다. my_string의 index_list의 원소들에 해당하는 인덱스의 글자들을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.' 이다.
제곱을 하는 방법은 ** 를 사용하는 방법과 math 라이브러리의 pow 함수를 이용하여 pow(m, n)의 형태로 m ** n을 구하는 방법이 있다 !
**를 이용한 방식과의 차이는
math.pow를 사용하면 정수끼리의 연산이더라도 결과가 항상 실수 형태로 반환된다는 점과 실수가 아닌 복소수의 경우는 지원하지 않는다는 점이다.
그래서 이 문제는
def solution(num_list):
sum1 = 1
sum2 = 0
for i in num_list:
sum1 *= i
sum2 += i
return 1 if sum1 < sum2 ** 2 else 0
이렇게 해결을 했다 !
여기에서 sum1은 곱해줘야하기 때문에 초기값을 1로 줘야한다는거 ! !
* 문자열 붙여서 출력하기 문제에서
문제는 '두 개의 문자열 str1, str2가 공백으로 구분되어 입력으로 주어집니다. 입출력 예와 같이 str1과 str2을 이어서 출력하는 코드를 작성해 보세요.' 이다.
처음에는 문제 이해가 잘 안돼서 변수를 어떻게 줘야하는지 고민하다가 힌트를 보고 알았다 !
입력 받은 문자열을 strip()함수와 split()함수로 처리해주면 되는 문제였다 ..... ㅠ
그래서 코드는
str1, str2 = input().strip().split(" ")
print(str1+str2)
이렇게 나온다 !
여기에서 strip()함수를 쓸때에는 꼭 strip() , 이 () 괄호를 !!!!! 꼭 써야한다 ㅋ.ㅋ
근데 더 대단한 코드를 봤다 ㅋㅋㅋㅋ
print(input().strip().replace(' ', ''))
대박수 ...

* 접두사인지 확인하기 문제에서
문제는 '어떤 문자열에 대해서 접두사는 특정 인덱스까지의 문자열을 의미합니다. 예를 들어, "banana"의 모든 접두사는 "b", "ba", "ban", "bana", "banan", "banana"입니다. 문자열 my_string과 is_prefix가 주어질 때, is_prefix가 my_string의 접두사라면 1을, 아니면 0을 return 하는 solution 함수를 작성해 주세요.' 이다.
처음 내 코드는
def solution(my_string,is_prefix):
for i in my_string:
for j in is_prefix:
if i == j:
return 1
else:
return 0
였는데, 코드 실행에서 다 해결되지 않았다 ㅠ
그럼 어떻게 풀어야되는지 검색을 해봤더니 startswith()함수를 사용하면 쉬운 문제였다 ㅠ
def solution(my_string,is_prefix):
return 1 if my_string.startswith(is_prefix) else 0
이렇게 하면 쉽게 풀리는 문제였다 ㅠ
고수분들의 더욱 간결한 코드는
def solution(my_string, is_prefix):
return int(my_string.startswith(is_prefix))
이랬돠 ..!
이것도 역시 True / False로 나오는 값을 int로 받아서 아주 간결하게 풀어낸 풀이다 ..!
연습하자 ,, 익숙해져야된다 ..!
스터디원들과 으쌰으쌰하면서 더 힘을 내서 문제를 풀 수 있었다 !
시너지 죠아 ~
오늘의 성과쓰 ~
17개 풀었다 ,,~
더 화이팅 하자 ~