| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- WIL
- 가상환경
- Git
- WHERE절
- Commpot
- 마스킹
- poetry
- 프로젝트
- 1주차
- github
- re-id
- 백준
- 정보처리기사실기
- vscode
- sql
- js
- 프로그래머스
- 개발일지
- 미니프로젝트
- 채팅
- channels
- 알고리즘
- Class
- WebSocket
- 파이썬
- 장고
- 정보처리기사
- 2주차
- resnet50
- REDIS
- Today
- Total
개발일기
#3. 프로그래머스 알고리즘 정리본 본문
오늘 총 15문제 풀었음.
오늘도 어김없이, 이 중 기억에 남는 알고리즘 풀이들을 정리해보자.
1. 이차원 배열 문제:
1 2 3
4 5 6
7 8 9
이차원 배열을 선언한 뒤 위와 동일하게 출력하기
# 나의 풀이
list = [[1,2,3],[4,5,6],[7,8,9]]
for i in list:
for j in i:
print(j, end=' ') #출력할 때 숫자 사이에 띄어쓰기하기
print()
# 인상깊은 다른 풀이 (언패킹)
for i in list:
print(*i)
언패킹.. 알고있는데, 왜 쓰질 못하니~~ㅠㅠㅠ
2. 배열 원소의 길이
ex) list = ['apple', 'love']이면 원소의 길이는 [5, 4]로 출력
# 내풀이
def solution(strlist):
index = 0
for i in strlist:
strlist[index] = len(i)
index += 1
return strlist
# 내풀이를 최적화 하면??
def solution(strlist):
return [len(i) for i in strlist]
# 다른 사람 풀이
def solution(strlist):
answer = list(map(len, strlist))
return answer
map을 쓰다닝..!! 하나 더 배워간다!!!
map 사용법..!
map(function, iterable)
# map(변환함수, 순회 가능한 데이터 like 리스트, 튜플)
map() 함수는 데이터가 담고 있는 모든 데이터를 변환함수에 적용하여 map 타입으로 return한다.
map 타입으로 return하기 때문에, 리스트 타입을 원한다면, list() 를 사용해서 리스트로 타입을 바꿔주어야 한다.
3. 배열의 유사도 :
문자열 배열 s1과 s2가 주어질 때 같은 원소의 개수를 return하도록
# 내풀이
def solution(s1, s2):
answer = 0
for i in s1:
if i in s2:
answer += 1
return answer
# 다른 사람 풀이
def solution(s1, s2):
return len(set(s1)&set(s2));
내 시간복잡도는 O(n^2)이지만.. 교집합으로 풀면 시간복잡도가 O(1)이다..ㅎㅎㅎ
교집합 생각하지도 못했는데, 하나 더 배워간다.
4. 문자 반복 출력:
문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string에 들어있는 각 문자를 n만큼 반복한 문자열을 return 하도록
# 내 풀이
def solution(my_string, n):
my_string_list = []
for string in my_string:
my_string_list.append(string*n)
return ''.join(my_string_list)
# 다른 사람 풀이
def solution(my_string, n):
return ''.join(i*n for i in my_string)
def solution(my_string, n):
answer = ''
for c in list(my_string):
answer += c*n
return answer
나는 이 문제를 빈 리스트에 반복된 문자를 append하고 join으로 문자열을 출력했는데,
다른 사람의 풀이를 보니 굳이 빈리스트가 필요하지 않구나!! 라는 걸 느낌
리스트로 바꾸지 않고, 문자열 상태에서 반복출력할 때에는 +를 이용해서 합쳐서 출력하면 된다.
참고로..! join은 리스트 속 문자열을 합쳐서 반환해주는 함수이다. (리스트 -> 문자열로..!)
'구분자'.join(리스트) : 리스트의 요소(원소)들을 구분자로 연결하여 문자열로 바꿔 return한다.
리스트 요소가 str일 경우에만 가능하다.
5. 짝수, 홀수 개수
정수가 담긴 리스트 num_list가 주어질 때, num_list의 원소 중 짝수와 홀수의 개수를 담은 배열을 return 하도록
# 내풀이
def solution(num_list):
even = sum(1 for a in num_list if a%2==0)
odd = sum(1 for a in num_list if a%2!=0)
return [even,odd]
# 남의 풀이
def solution(num_list):
answer = [0,0]
for n in num_list:
answer[n%2]+=1
return answer
6. 중복된 숫자 개수
정수가 담긴 배열 array와 정수 n이 매개변수로 주어질 때, array에 n이 몇 개 있는 지를 return
# 내풀이
def solution(array, n):
return sum(1 for a in array if a ==n)
# 다른 사람
def solution(array, n):
return array.count(n)
count..!!ㅋㅋㅋ 완전 간단해~~
count(n)은 말 그대로 n이 몇 개 있는지 세어주는매소드이다.
7. 배열 뒤집기
거꾸로 출력하기
#내풀이
def solution(num_list):
return num_list[::-1]
# 다른 사람 풀이
def solution(num_list):
num_list.reverse()
return num_list
def solution(num_list):
answer = []
for i in range(1,len(num_list)+1):
answer.append(num_list[-i])
return answer
array[::] 사용법
먼저 기본 형태를 알고 있으면 어렵지 않다.
array[A:B:C] 는, 인덱스 A부터 B 전까지 C의 간격으로 배열을 만들어라는 의미
예를 들어,
array[1:4:2]은 array의 인덱스 1부터 인덱스 4 전까지 2의 간격으로
array[::-1]은 처음부터 끝까지 -1칸 간격.. 즉 역순으로
array[1::-1]은 인덱스 1부터 끝까지 역순으로
array[1::2]은 인덱스 1부터 끝까지 2칸 간격으로
array[:8:2]은 처음부터 인덱스 8 전까지 2의 간격으로
array.reverse() 사용할 때 주의: reverse()는 리스트 타입에서 제공되는 함수
8. 옷 가게 할인받기
import math
def solution(price):
if price >= 500000:
return math.trunc(price*0.8)
elif price >= 300000:
return math.trunc(price*0.9)
elif price >= 100000:
return math.trunc(price*0.95)
else:
return price
math.trunc vs math.floor 차이점 비교
math.trunc 는 소수점 이하는 버림
math.floor는 내림
양수에서는 둘다 출력값이 똑같다.
print(math.trunc(3.5))
>> 3
print(math.trunc(3.5))
>>3
음수에서는 차이가 있다.
print(math.trunc(-3.5))
>> -3
print(math.floor(-3.5))
>> -4
이상.. 끝..!
'오류 및 알고리즘정리본' 카테고리의 다른 글
| #4 프로그래머스 순서쌍개수/최빈값찾기 (0) | 2023.04.06 |
|---|---|
| TypeError: can only join an iterable 에러메세지 (feat. 프로그래머스 문자열 뒤집기, 특정 문자 제거하기 알고리즘) (0) | 2023.04.05 |
| #2. 빈도수 큰 알파벳 구하기 (아스키코드) (0) | 2023.04.03 |
| #1 프로그래머스 알고리즘 정리본 (0) | 2023.03.31 |
| 오류) vscode Git 10k 없애기 (0) | 2023.03.21 |