프로그래머스 코테 입문 레벨0 인상깊었던 문제 & 코드 리뷰
2부터 n이랑 나누는데 나머지가 0이면 소인수 O, 0이 아니면 1씩 늘리고 n으로 나눌때까지 반복
d = 2
while d <= n:
if n % d == 0:
answer.append(d) # 이때 d가 소인수
n = n // d
else:
d += 1
내 코드
🌊flow🌊
a
)과 내림차순으로 정렬한 것(b
) 2개를 만든다.a
의 순서대로 b
에는 a
의 원소 i
가 어디에 위치해있는지 인덱스를 찾는다.🗝️Point🗝️
(인덱스+1)
를 등수로 활용하기[100, 90, 80]
이면 0번째 원소 100점이 1등, 2번째 원소 80점이 3등index()
는 가장 앞에 있는 값만 보내주기 때문에 같은 점수에 대해 공동순위 매기기가 가능하다.[100, 90, 90, 80]
이면 0번째 원소 100점이 1등, 2번째 원소 90점이 2등, 3번째 원소 90점도 2등(index(90)
은 2번째 90점만 찾음)✏️memo✏️
a의 순서대로 b에서 찾는거, 공동순위 매기기가 엄청나게 헷갈렸다. 느낀점은 최대한 구현이 편하도록 제한사항을 둬주는 느낌 (원래 2,3등 기록이 똑같으면 둘다 동메달을 주는건데 여기서는 은메달을 주는 것처럼) 그러니까 제한사항도 꼼꼼히 따져봐야겠다.
내 코드
🌊flow🌊
🗝️Point🗝️
✏️memo✏️
진짜 이거 규칙을 못찾아서 진짜 별.. 하....... 내가 너네한테 저주 더 내릴거다
아무튼 40이라고 했을때 이걸 <0부터 1씩 40번 늘린 숫자>라는 논리가 정말 죽어도 생각이 안나더라... 숫자에 대한 새로운 접근방법을 안거에 의의를 두자...
원래 코드
다른사람 코드 보고 고친 코드
🌊flow🌊
🗝️Point🗝️
sorted()
에 key
를 통하여 정렬할 기준을 정할 수 있다.
기본값은 오름차순이기 때문에 내림차순으로 하려면 -
를 붙이면 된다.
ex) sorted(array, key = lambda x: f(x))
라면, lambda
의 x
에는 정렬할 배열인 array
의 "원소 하나"가 들어간다고 생각하면 되겠다. array
의 원소 x
를 함수 f(x)
에 넣어 나온 결과값을 기준으로 정렬한다는 뜻이다.
튜플을 사용해서 key
에 정렬에 고려할 조건을 여러개 넣을 수도 있다.
ex) sorted(array, key = lambda x: (f(x), g(x)))
라면, 일단 f(x)
를 기준으로 정렬한 다음에, 값이 같은 원소가 있으면 얘네는 g(x)
를 기준으로 정렬한다는 뜻이다.
✏️memo✏️
sorted()
에 이런 좋은 기능이 있는 줄 알았으면 저런 헛짓거리는 안했을텐데... 정말 알아야 푸는구나. 몰라서 못풀었던 문제
쪽팔려서 진짜 내 코드는 세상에서 날려버렸고 다른 사람 코드 보고 고친 코드
🌊flow🌊
🗝️Point🗝️
✏️memo✏️
학교 다닐때 이런 이차원배열 문제가 시험에 나온적이 있는거 같은데... 그때 이걸 알았으면 맞출 수 있었을텐데... 그때도 못풀고.. 지금도 못풀고...
내 코드
🌊flow🌊
[i, j]
를 길이가 1인 선분 [i, i+1]
, [i+1, i+2]
, ..., [j-1, j]
으로 쪼갠다.🗝️Point🗝️
✏️memo✏️
처음에는 선분에만 정신 팔려서 감도 못잡았는데 '집합'을 이용해서 푼다는 힌트를 보고 아! 해서 풀었다. 집합.. 집합 활용을 잘하자.