| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 프로젝트
- 프로그래머스
- 파이썬
- 마스킹
- WIL
- 미니프로젝트
- re-id
- WebSocket
- 2주차
- 채팅
- 가상환경
- 정보처리기사
- js
- 장고
- 알고리즘
- 정보처리기사실기
- 개발일지
- 백준
- github
- Commpot
- resnet50
- sql
- Git
- 1주차
- WHERE절
- channels
- REDIS
- Class
- poetry
- vscode
Archives
- Today
- Total
개발일기
#4 프로그래머스 순서쌍개수/최빈값찾기 본문
1. 순서쌍 개수
: 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록
def solution(n):
total = 0
for i in range(n):
if n % (i+1) == 0:
total += 1
return total
# 다른 사람 풀이
def solution(n):
return len(list(filter(lambda v: n % (v+1) == 0, range(n))))
혼자 풀 때, 잘 안 되어서 페어프로그래밍으로 함께 해보았다. 함께 얘기하니 머리 속에 떠오르는 아이디어들이 정리가 되면서 금방 해결할 수 있었다.
다른 사람의 풀이 중에서 filter을 사용해서 순서쌍 개수를 구한 풀이가 인상깊었다.
filter 사용법 - 파이썬 내장 함수
여러 개의 데이터로 부터 일부의 데이터만 추려낼 때 사용한다.
따라서, 여러 개의 데이터를 담고 있는 list나 tuple을 대상으로 주로 사용하는 함수이다.
filter(조건 함수, 순회 가능한 데이터)
두번째 인자로 넘어온 데이터 중에서 조건 함수를 만족하는 데이터만을 반환한다.
주의할 점..!
filter() 함수는 filter 타입으로 결과를 리턴한다는 것..!!!!!
2. 최빈값 찾기
: 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록
이 문제는 팀원 분 중 한 분이 질문을 주셔서 네비게이터가 되어 함께 문제를 해결해보았다.
# 내 풀이
def solution(array):
check = {} # 빈 딕셔너리
for ar in array:
if ar not in check:
check[ar] = 1
else:
check[ar] += 1
max_check = max(check.values())
# 딕셔너리 밸류값의 최댓값
a = {}
for key, value in check.items():
if value == max_check:
a.setdefault(key, value)
if len(a) > 1:
return -1
else:
return list(a.keys())[0]
dict.setdefault(key,value) 사용법 - 키, 밸류쌍을 딕셔너리에 추가 또는 반환
첫번째 인자로 키(key)값, 두번째 인자로 기본값(default value)를 넘긴다.
(첫번째 인자는 필수사항이고, 두번째 인자는 선택사항이다.)
첫번째 파라미터로 받은 것과 동일한 key가 딕셔너리 내에 존재하면 그 키의 값을 반환한다.
만약 첫번째 파라미터로 받은 것과 동일한 key가 딕셔너리에 존재하지 않으면 None을 반환한다.
만약 키 또는 키와 밸류 값이 딕셔너리에 없다면, 딕셔너리 안에 그 키 값 또는 키,밸류쌍이 추가된다.
그러나 키가 이미 딕셔너리안에 있는 경우 딕셔너리 자체에는 아무 일이 일어나지 않는다.
a = {'fruit':'apple', 'person':'me'}
print(a.setdefault('fruit'))
>> 'apple'
print(a.setdefault('hobby','cooking'))
>> 'cooking'
print(a)
>> {'fruit':'apple', 'person':'me', 'hobby':'cooking'}
print(a.setdefault('likes'))
>> None
print(a)
>> {'fruit':'apple', 'person':'me', 'hobby':'cooking', 'likes':None}
다른 사람 풀이)
sol1)
def solution(array):
i = 0
while len(array) != 0:
for i, a in enumerate(set(array)):
array.remove(a)
if i == 0: return a
return -1
풀이설명)
set 의 성질) 중복되는 원소는 제거한다.
set을 이용하여 배열의 모든 원소를 한 개씩 모두 소거해 나가면서,
최종적으로 값의 종류가 1개가 남을 경우(최빈값) i=0이므로 해당 값을 반환하고,
값의 종류가 두 개 이상이 남을 경우 i가 1이상이 되므로 -1을 반환합니다.
[3, 3, 3, 1, 2]일때 한 번 반복을 돌면 원소의 종류[1, 2, 3]을 한 번씩 제거하고 [3, 3]이 됩니다.
set([3, 3])은 (3)이 되므로 그럼 i는 0에서 끝난다..!!!!
sol2)
def solution(array):
keys = set(array)
dict = {}
max_freq = []
for key in keys:
dict[key] = array.count(key)
for key in keys:
if dict[key] == max(dict.values()):
max_freq.append(key)
if len(max_freq) > 1:
answer = -1
else:
answer = max_freq[0]
return answer
sol3)
from collections import Counter
def solution(array):
a = Counter(array).most_common(2) #개수 많은 순으로 2개만
if len(a) == 1:
return a[0][0] #키값
if a[0][1] == a[1][1]: #밸류값
return -1
#most_common() : 개수가 많은 순으로 정렬된 튜플 배열 리스트를 리턴한다
#Counter() : 문자열이나, list 의 요소를 카운팅하여 많은 순으로 딕셔너리형태로 리턴한다
'오류 및 알고리즘정리본' 카테고리의 다른 글
| #5 프로그래머스 크기가작은부분문자열/모음제거(re.sub 개념)/숨어있는숫자의덧셈 (0) | 2023.04.19 |
|---|---|
| 에러메세지) manage.py:23: UserWarning: Not reading .env - it doesn't exist. dotenv.read_dotenv() (0) | 2023.04.11 |
| TypeError: can only join an iterable 에러메세지 (feat. 프로그래머스 문자열 뒤집기, 특정 문자 제거하기 알고리즘) (0) | 2023.04.05 |
| #3. 프로그래머스 알고리즘 정리본 (0) | 2023.04.04 |
| #2. 빈도수 큰 알파벳 구하기 (아스키코드) (0) | 2023.04.03 |