프로그래머스 132

[프로그래머스, 파이썬] 등수 매기기

풀이 첫 번째 풀이는 2중 for문을 사용해서 특정 값과 비교 값을 비교하며 조건에 따라 특정 값의 인덱스에 따른 result의 값을 차감했는데 O(n2)으로 시간 효율성이 좋지 않기에 두 번째 풀이와 같이 index로 접근하게 되면 시간 효율성을 좀 더 높일 수 있다. 첫 번째 풀이 def solution(score): li = [sum(i)/2 for i in score] result = [len(score)]*len(score) for i in range(len(li)): for j in range(len(li)): if i!=j and li[i] >= li[j]: result[i]-=1 return result 두 번째 풀이 def solution(score): li = [sum(i)/2 for ..

알고리즘 2024.03.29

[프로그래머스, 자바스크립트] 삼각형의 완성조건 (1)

풀이 자바처럼 간단한 문제부터 해결하면서 메서드와 구현 방식을 유연하게 적용시키기 위해 풀기로 함. 해당 문제는 간단한 문제이지만 배열을 잘 사용하기 위해 가변 배열을 생각하여 해결하고자 함. 그래서 slice와 reduce를 사용하여 해결. function solution(sides) { let li = sides.sort((a,b)=>a-b) return (li.slice(0,li.length-1).reduce((hap,val)=>hap+val,0) > li[li.length-1])?1:2; }

알고리즘 2024.03.25

[프로그래머스, 파이썬] 숫자 변환하기

풀이 값 비교를 계속 진행해야 하고 몇 번 작업을 했는지 확인해야 하기에 deque를 활용하여 해결하고자 했으며 처음에는 연산을 마친 값이 y보다 작거나 같을 경우만 해서 q에 추가하여 해결하고자 했지만 시간초과가 발생하여 어떻게 하면 좋을지 살펴본 결과 방문 표시를 하면 되었기에 해쉬로 값을 찾는 집합 형태로 visit를 만들어 연산 값이 지난 번에 작업하지 않은 값의 경우만 q에 추가하도록 하여 해결. from collections import deque def solution(x, y, n): if x == y: return 0 visit = {x} q = deque([[x+n,1],[x*2,1],[x*3,1]]) while q: val,cnt = q.popleft() if val == y: ret..

알고리즘 2024.03.22

[프로그래머스, 파이썬] 롤케이크 자르기

풀이 처음 접할때는 두 번째 풀이와 같이 작성하면서도 시간 초과가 발생할 것 같았다. 다만 해당 방법 이외에 어떻게 접근해야 할지 잘 떠오르지 않아서 힌트를 확인해보았는데 지금까지는 비교 대상에 대한 구조를 동일하게 하는 것을 습관으로 여겼다. 예를 들어 배열이면 배열끼리, 딕셔너리면 딕셔너리, 집합이면 집합끼리 식으로. 그런데 해당 힌트는 딕셔너리와 집합을 활용하면 된다고 하기에 처음에는 어떤 방법인지에 대해 생각을 해봤는데 딕셔너리에서 topping 요소를 하나씩 차감하는데 이때 값이 더이상 존재하지 않을 경우엔 딕셔너리 자체에서 key값을 제거하고 반복문을 돌때마다 해당 토핑을 철수라는 집합에 추가하게 되면 문제를 해결할 수 있다. from collections import Counter def s..

알고리즘 2024.03.22

[프로그래머스, 자바] 약수의 합

풀이 간단한 문제이지만 알지 못했던 자바 메서드를 사용했기에 정리하려 포스팅. 파이썬에서는 int(x**(1/2))와 같이 작성하면 되는걸 자바에서는 어떻게 작성해야하나 싶었는데 우선 Math.sqrt(x)를 넣어주게 되면 되고 이걸 Math.floor() 에 넣어줘서 소수 부분을 버리기. 이후 (int)로 정수화 시켜 해결. 그리고 만약 (1/2)가 아닌 가변의 값이라면 어떻게 해야하는지 궁금해서 찾아보니 Math.pow()로 첫 번째 인자로 x를 넣고, 두 번째 인자로 원하는 값을 넣는 건데 이때 모든 인자의 값은 정수가 아닌 실수로 넣어줘야 한다는 것을 주의하기 해결 코드 아래에 Math.pow()적용 법에 대한 코드 또한 함께 첨부. class Solution { public int solutio..

알고리즘 2024.03.20

[프로그래머스, 자바] 자릿수 더하기

풀이 단순하게 10으로 나눈 나머지를 계속 더하는 방법도 있지만 자바에 대해 익숙해지기 위해 형변환을 하여 값을 추가하고자 해서 아래와 같이 해결했는데 해결 과정에서 파이썬의 range(시작, 끝)과 같은 걸 for-each로 접근하고 싶었는데 잘 되지 않아 찾아본 결과 stream을 사용하면 되어 두 번째 해결 방법처럼 하면 해결이 된다. 아 그리고 charAt()으로 문자를 가져온 다음 변형하려면 String.value()로 형변환은 한 번 더해야함. import java.util.*; public class Solution { public int solution(int n) { int result = 0; String s_n = String.valueOf(n); for (char num: s_n.t..

알고리즘 2024.03.20

[프로그래머스, 자바] 유한소수 판별하기

풀이 우선 기약분수와 소인수에 대한 정의를 한 번 하고 가자면 기약분수란? 분자와 분모의 공약수가 1로만 이루어져 있는 분수. 소인수란? 주어진 자연수를나누어 떠러뜨리는 약수 중 소수(1)인 약수이기에 해당 문제는 우선 a와 b를 기약분수로 만드는 것부터 접근을 했다. 그래서 s가 e보다 커지기 전까지 while문을 돌렸고 의미 없이 반복하기 보단 마지막을 a로 지정하고 a가 줄어들면 e 또한 함께 줄여 시간을 단축하고자 했으며 이후 분모가 2와 5로만 나누어져서 현재 상태가 1일 경우인지 아닌지에 대한 판별하여 해결. class Solution { public int solution(int a, int b) { int s = 2; int e = a; while (s

알고리즘 2024.03.20