728x90
문제 링크: https://www.acmicpc.net/problem/2798
블랙잭 문제를 본 순간 뚜둥
스쿨오브락의 잭 블랙이 생각이 나면서 문제를 풀기 시작했다... ㅋㅋㅋㅋㅋㅋ
그래서인지 문제를 제대로 파악하지 못하고 실수를 하게 되는 사태가 발생 ㅋㅋㅋㅋㅋㅋ
왜냐하면 내 머릿 속에 잭블랙이 영화 속에서 베이스키타를 들고
뚜뚱뚱~ 뚜둥 뚜둥~ 둥뚱 뚜두둥~~🎸
(이 멜로디를 아는 사람은 이렇게 텍스트만 봐도 멜로디를 흥얼거릴 듯)
아직도 무한도전에서의 잭 블랙의 표정이 떠오르면서 다시 문제를 제대로 풀어보쟈쟈쟈🔥
❌ 1차시도 실패
먼저 찾은 것을 하나씩 리스트에서 제거하면서 풀려고 시도했었다.
그런데 그러면 다시 처음돌아가서 반복해서 풀때 리스트에서 없어져버렸으니,
리스트[1]을 처음으로 다시 시작할거란 예상과 달리 리스트[3]를 처음 수로 시작하고 있었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#1차시도: 반복문으로 하나씩 꺼내면서 제외시키고 반복문 돌리고
n,m= map(int,input().split())
card=list(map(int,input().split()))
candi=[ ]
for i in card:
card.remove(i)
for j in card:
card.remove(j)
for k in card:
candi.append(i+j+k)
result=[i for i in candi if i <=m]
print(max(result))
|
cs |
❓ 정답은 ??
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#2차시도: 반복문으로 앞에서부터 하나씩 꺼내고
#그 다음껀 앞에꺼 제외하고 또 반복돌리고~또제외하고 돌리고 나온 조합들 리스트에 넣기
n,m= map(int,input().split())
card=list(map(int,input().split()))
candi=[ ] #candi 후보 리스트에 넣기
for i in range(n):
for j in range(i+1,n):
for k in range(j+1,n):
candi.append(card[i]+card[j]+card[k])
result=[i for i in candi if i <=m]
print(max(result))
|
cs |
💯 풀이 과정
앞에 for반복문에서 사용했던 애는 remove하지말고 그 다음 반복문에서 빼고 범위를 설정하면 되는 거였다.
그렇게 3개 카드를 선택해서 만들어진 리스트 중
candi 후보리스트에서 리스트 컴프리핸션을 이용해 m이하 조건을 만족하는 애들을 추려내는
result 결과 리스트에 넣어놓고 최대값을 찾으면 답이 나옴!
😎오늘의 한줄평: 어떤 것을 제외해서 돌릴 때는 삭제하기보다는 범위 설정을 통해 제외시켜보자.
리스트 컴프리핸션은 복잡하지만 이용하면 넘나 편한 것
728x90
'😁 빅데이터 문제 풀기 & Study > - BAEKJOON 문제' 카테고리의 다른 글
[2667번] 단지번호 붙이기 / python3 (DFS의 향연, 추후 BFS 업로드예정) (0) | 2021.11.09 |
---|---|
[2606번] 바이러스 / python3 (feat. DFS, BFS 2가지 방법으로) (0) | 2021.11.08 |
[1260번] DFS와 BFS / python3 (feat.이코테 유튜브 강의) (0) | 2021.11.05 |
[2941번] 크로아티아 알파벳 / python3 (in, replace) (0) | 2021.11.05 |
[2751번] 수 정렬하기 2 / python3 (0) | 2021.11.04 |