📌 파이썬 으로 풀이

 

📌 문제 링크 :

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📌 문제 설명 :

경화는 과수원에서 귤을 수확했습니다. 경화는 수확한 귤 중 'k'개를 골라 상자 하나에 담아 판매하려고 합니다. 그런데 수확한 귤의 크기가 일정하지 않아 보기에 좋지 않다고 생각한 경화는 귤을 크기별로 분류했을 때 서로 다른 종류의 수를 최소화하고 싶습니다.

예를 들어, 경화가 수확한 귤 8개의 크기가 [1, 3, 2, 5, 4, 5, 2, 3] 이라고 합시다. 경화가 귤 6개를 판매하고 싶다면, 크기가 1, 4인 귤을 제외한 여섯 개의 귤을 상자에 담으면, 귤의 크기의 종류가 2, 3, 5로 총 3가지가 되며 이때가 서로 다른 종류가 최소일 때입니다.

경화가 한 상자에 담으려는 귤의 개수 k와 귤의 크기를 담은 배열 tangerine이 매개변수로 주어집니다. 경화가 귤 k개를 고를 때 크기가 서로 다른 종류의 수의 최솟값을 return 하도록 solution 함수를 작성해주세요.

 

📌 제한 사항

  • 1 ≤ k  tangerine의 길이 ≤ 100,000
  • 1 ≤ tangerine의 원소 ≤ 10,000,000

 

📌 입출력 예


추측) 

크기 숫자를 인덱스로 사용하여 개수를 배열로 정리.

가장 max 값인거 부터 k값에서 빼고 0으로 초기화해서 그 다음 큰값 이런 식으로 최대한 한 종류에서 많은 수를 뺄 수 있게 하는 방식으로 진행하면 될 듯!

 

소스코드) 

* 1차) 82.4 점 나머지 시간초과 

def solution(k, tangerine):
    
    answer = 0
    tangerine_arr = [0] * (max(tangerine) + 1)
    
    for one in tangerine :
        tangerine_arr[one] += 1
        
    while k > 0 :
        max_num = max(tangerine_arr)
        k -= max_num
        answer += 1
        tangerine_arr[tangerine_arr.index(max_num)] = 0
    
    return answer

* 2차) 성공

def solution(k, tangerine):
    
    answer = 0
    tangerine_arr = [0] * (max(tangerine) + 1)
    
    for one in tangerine :
        tangerine_arr[one] += 1
        
    if k < max(tangerine_arr) :
        return 1
        
    tangerine_arr.sort()
    tangerine_arr.reverse()
    
    for one in tangerine_arr :
        k -= one
        answer += 1
        if k <= 0 :
            break
    
    return answer

 

 

리뷰) 

1차 피드백)

1차에서 while문에서 시간초과가 나는 거 같아서 어떻게 수정할까 고민했는데,

이게 종류의 개수가 중요한거지 크기 종류가 무엇인가는 중요하지 않은 문제여서 이부분을 다시 생각해봤다.

 

크기별로 배열 정리한 후에 정렬하고 역정렬해 for문으로 가장 큰 개수를 가진 거 부터 k에서 빼면 되겠다 싶어 진행!

 

'Coding Test > Algorithm' 카테고리의 다른 글

Programmers] 공원 산책  (0) 2023.04.03
Programmers] 덧칠하기  (0) 2023.03.28
순열  (0) 2023.03.18
Programmers] 멀리 뛰기  (0) 2023.03.18
Programmers] [1차] 캐시  (0) 2023.03.18

 

📌 공부이유

알고리즘을 풀면서 요소를 나열하여 나오는 경우의 수를 구하는 경우가 많은 데 이때의 방식을 이해하고 쉽게 사용할 수 있는 식을 익히기 위해 정리!

 

📌 순열 : 순서를 고려하여 나열하는 것

서로 다른 n개에서 r개를 택하여 순서있게 나열 (단, 0 < r <= n)

엔피알이라고 읽는다(P는 순열을 뜻하는 Permutaion의 P). 그리고 수식으로 풀이하면 아래와 같다.

 

 

📍예제

1,2,3 중 2개를 선택해 순서있게 나열하는 경우의 수는 무엇인가

 

첫번째 자리는 3개 중 아무거나 올수 있기 때문에 3가지 경우 수

두번째 자리는 1개가 이미 선택되었기 때문에 남은 2개 중 선택할 수 있기 때문에 2가지 경우의 수가 있다.

이 경우를 곱하면 3x2 = 그래서 6가지 

 

이걸 위의 표기 식으로 적용하면 

 

 

여기서 순열을 좀 더 쉽게 표현하는 방법이 있다

1부터 n까지의 자연수를 차례로 곱하는 것이 n의 계승이라고 하며 n! 로 표기한다 (n 팩토리얼이라고 읽는다)

4! 라면 4*3*2*1 을 의미하며 위의 순열 표기로 봤을 때 아래와 같다 

 

*** 0일 케이스 주의 

그럼 엔피엔일 경우는 그런데 그런 nPr은?

nPr을 nPn화 시키면 (n-r)*....*1을 곱해야한다. 그리고 그식은 바로 (n-r)! 에 해당하니

n! 에서 (n-r)! 나누면 nPr 값이 되는 것이다. 

📌 같은 것이 있는,  중복이 있는 순열

위에서는 서로 다른 요소들이 있는 순열이 었는데 같은 요소가 있는 경우는 어떻게 해야할까?

이런 경우 n! / (n-r)! 에서 중복된 요소들끼리의 자리 바꿀 경우의 수를 나누어 주면 된다. 

 

아래 경우

ABCDE, ACBDE, BACDE, BCADE, CABDE, CBADE는 모두 6가지 다른 요소다

하지만 여기서 BC가 모두 A라면?

AAADE, AAADE, AAADE, AAADE, AAADE, AAADE  6가지 모두 같은 요소가 되어 버린다.

이렇게 때문에 중복요소가 3개면 아래 처럼 표현할 수 있게 된다.

그럼 나머지 DE도 다른 값으로 중복이 되면 어떻게 표현 할까 

바로 아래 처럼 표현 할 수 있다

그래서 결국 위의 예제에서 중복된 순열을 만들 경우 10가지만 나온다 

 

 

 

 

참고 자료 : 

 

'Coding Test > Algorithm' 카테고리의 다른 글

Programmers] 덧칠하기  (0) 2023.03.28
Programmers] 귤 고르기  (0) 2023.03.28
Programmers] 멀리 뛰기  (0) 2023.03.18
Programmers] [1차] 캐시  (0) 2023.03.18
Programmers] 괄호 회전하기  (0) 2023.03.14

📌 파이썬 으로 풀이

 

📌 문제 링크 :

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📌 문제 설명 :

효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다.

칸이 총 4개 있을 때, 효진이는
(1칸, 1칸, 1칸, 1칸)
(1칸, 2칸, 1칸)
(1칸, 1칸, 2칸)
(2칸, 1칸, 1칸)
(2칸, 2칸)
의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 예를 들어 4가 입력된다면, 5를 return하면 됩니다.

 

📌 제한 사항

  • n은 1 이상, 2000 이하인 정수입니다.

 

📌 입출력 예


추측) 

n의 개수를 일단 2로 나눈 몫을 구한다 .

몫이 0이면 n는 1밖에 없으므로 cnt에 1을 넣어 반환

몫이 0이 아니면 몫의 길이 만큼 for문을 돌린다. 

for문의 i를 2칸의 개수로 보고 n에서 2*i를 뺀걸 1칸의 개수로 본다.

그리고 그 턴에서의 2칸의 개수와 1칸의 개수로 중복있는 순열의 경우 수를 구해 최종 값에 +대입한다. 

모든 for문을 돌면서 경우의 수를 누적하고 마지막으로 리턴한다. 

 

소스코드) 

* 1차) 실패 : 정확도 37.5점

def solution(n):
    answer = 0
    num = int(n/2)

    if num == 0 :
        return 1

    for i in range(0, num + 1):
        two_num = i
        one_num = n-(2*i)

        if two_num == 0 or one_num == 0 :
            answer += 1
            continue

        top_num = factorial(two_num+one_num, 1)
        b_case = factorial(two_num, 1)
        c_case = factorial(one_num, 1)

        case_num = int(top_num / (b_case * c_case))
        answer += case_num

    return answer % 1234567

def factorial(num, result):
    if num == 0 :
        return result

    result *= num
    num -= 1
    return factorial(num, result)

* 2차) 성공 : 다른 사람들이 DP방식 적용했다는 거 알고 공부 후 적용

def solution(n):
    n_list = [0] * n

    for i in range(n):
        if i == 0 :
            n_list[i] = 1
        elif i == 1 :
            n_list[i] = 2
        else:
            n_list[i] = n_list[i-1] + n_list[i-2]

    return n_list[n-1] % 1234567

 

 

리뷰) 

 

1차)

찾아도 어려운 길로 찾아가고 있었구나 싶다 나도 참.. 순열로 풀라고 했는데

나름 회심의 재귀함수로 팩토리얼 구현까지 했는데 🤣

 

더이상 해결이 안되서 질문하기 글들을 봤다

그 중 똑같이 순열로 풀어본 사람이 테스트 예시로 2000을 넣어보라는 글이 있었다.

아... 이런 ㅋㅋㅋ오버플로우!

이런 오류가 날 수 있는 상황도 생각했어야지!  

 

그럼 다른 사람들은 이 문제를 어떻게 접근했을 까하고 보니 DP로 푸는 걸 보게 됬다.

일단 왜 이게 DP일까? 싶어서 경우의 수를 차례차례 따져봤다. 

n 경우의  수    
1 (1칸) 1  
2 (1칸,1칸), (2칸) 2  
3 (1칸,1칸,1칸), (2칸, 1칸), (1칸, 2칸) 3 1+2
4 (1칸,1칸,1칸,1칸),(2칸,1칸,1칸), (1칸, 2칸, 1칸), (2칸,1칸,1칸), (2칸, 2칸) 5 2+3
5 (1칸,1칸,1칸,1칸,1칸),(2칸,1칸,1칸,1칸), (1칸,2칸,1칸,1칸),(1칸,1칸,2칸,1칸),(1칸,1칸,1칸,2칸), (2칸, 2칸,1칸),(2칸,1칸,2칸), (1칸,2칸,2칸) 8 3+5
      피보나치 수열 형태로 나온다

아, 피보나치! 

 

그래서 바로 적용!

일단 앞의 수들을 다 미리 저장해 두려면 n개 만큼 0이 든 배열을 만든다.

n_list = [0] * n

n 만큼 for문을 돌릴건데 n이 1과 2일 때는 앞에 2개의 수가 없으므로 그냥 각각 1과 2을 인덱스에 대입한다. 

3 이상 부터는 그 인덱스의 전 값과 바로 전전 값을 더해 대입한다. 

n 만큼 for문을 돌아 배열을 완성하면 n-1의 인덱스 값을 가져와 리턴한다. 

 

그러면 최종적으로 경우의 수를 구하게 된다! 

 

휴 아직도 경험치가 많이 부족하다. 문제 파악을 빠르고 정확하게 할 수 있도록 많이 풀어보자.

'Coding Test > Algorithm' 카테고리의 다른 글

Programmers] 귤 고르기  (0) 2023.03.28
순열  (0) 2023.03.18
Programmers] [1차] 캐시  (0) 2023.03.18
Programmers] 괄호 회전하기  (0) 2023.03.14
Programmers] 최솟값 만들기  (0) 2023.03.13

📌 파이썬 으로 풀이

 

📌 문제 링크 :

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📌 문제 설명 :

지도개발팀에서 근무하는 제이지는 지도에서 도시 이름을 검색하면 해당 도시와 관련된 맛집 게시물들을 데이터베이스에서 읽어 보여주는 서비스를 개발하고 있다.
이 프로그램의 테스팅 업무를 담당하고 있는 어피치는 서비스를 오픈하기 전 각 로직에 대한 성능 측정을 수행하였는데, 제이지가 작성한 부분 중 데이터베이스에서 게시물을 가져오는 부분의 실행시간이 너무 오래 걸린다는 것을 알게 되었다.
어피치는 제이지에게 해당 로직을 개선하라고 닦달하기 시작하였고, 제이지는 DB 캐시를 적용하여 성능 개선을 시도하고 있지만 캐시 크기를 얼마로 해야 효율적인지 몰라 난감한 상황이다.
어피치에게 시달리는 제이지를 도와, DB 캐시를 적용할 때 캐시 크기에 따른 실행시간 측정 프로그램을 작성하시오.

 

📌 제한 사항

  • 캐시 크기(cacheSize)와 도시이름 배열(cities)을 입력받는다.
  • cacheSize는 정수이며, 범위는 0 ≦ cacheSize ≦ 30 이다.
  • cities는 도시 이름으로 이뤄진 문자열 배열로, 최대 도시 수는 100,000개이다.
  • 각 도시 이름은 공백, 숫자, 특수문자 등이 없는 영문자로 구성되며, 대소문자 구분을 하지 않는다. 도시 이름은 최대 20자로 이루어져 있다.

📌 출력 형식

  • 입력된 도시이름 배열을 순서대로 처리할 때, "총 실행시간"을 출력한다.

📌 조건

  • 캐시 교체 알고리즘은 LRU(Least Recently Used)를 사용한다.
  • cache hit일 경우 실행시간은 1이다.
  • cache miss일 경우 실행시간은 5이다.

 

📌 입출력 예

 


추측) 

앗 이번 문제는 일단 캐시 교체 알고리즘 LRU(Least Recently Used) 이거 부터 알아야 할 거 같아서 공부! 

 

LRU는 페이징 기법으로 메모리를 관리하는 운영체제에서 페이지 부재가 발생했을 때 새로운 페이지를 할당하기 위해 현재 할당된 페이지 중 어느것과 교체 할지를 결정하는 방법이다. 

LRU가장 오랫동안 참조되지 않은 페이지를 교체하는 방식을 말한다. 

 

예시로 

cacheSize = 3 

cities = ["Jeju", "Pangyo", "Seoul", "Jeju", "New york", "Seoul", "Busan", "Chuncheon", "Jeju"]

1 2 3 4 5
Jeju Jeju Jeju Jeju Jeju
  Pangyo Pangyo Pangyo New york
    Seoul Seoul Seoul
  1. 일단 처음 Jeju를 참조를 하려고 하는데 페이지들이 텅텅 비어있다. (cache miss 발생, 시간+5 = 총시간 5)
    Jeju를 할당한다. 
  2. Pangyo 또한 없다 (cache miss 발생, 시간+5 = 총시간 10)
  3. Seoul 또한 없다 (cache miss 발생, 시간+5 = 총시간 15)
  4. 페이지들 3개가 할당되고 나서 Jeju를 조회하려 하니 오! 일치하는 게 있다. (cache hit 발생, 시간+1 = 총시간 16)
    이미 캐싱되어 있던걸 참조했으니 페이지에 변화는 없다. 
  5. 이제 New york을 조회하려 하는데 페이지에 New york이 없다. (cache miss 발생, 시간+5 = 총시간 21)
    이제부터가 문제인데 여기서 New york을 새로운 페이지로 할당을 해줘야 하는데 어떤거랑 바꾸지? 가 중요한거다.
    그리고 조건에서 그걸 LRU로 정해준거고.. LRU는 가장 오랫동안 참조되지 않은 페이지랑 교체하는 알고리즘으로 페이지들 중 가장 오래된 페이지를 찾는다. 
    Jeju가 먼저 들어왔으니 Jeju가 가장 오래된 걸까? No! 4번에서 Jeju는 한번 새롭게 참조되어 시간이 갱신됬다. 그래서 현재 가장 빨리 참조된 페이지로 바뀌어 결국 2번째로 들어와 한번도 참조 안된 Pangyo가 가장 오래된 페이지가 된다.
    따라서 Pangyo > New york이 된다. 

이런식으로 캐시가 비어있을 땐 모두 채워주고, 모두 채워진 이후에는 최근 참조된 시간을 비교해 교체해주는 방식으로 진행하면 된다. 

 


이걸 이제 로직으로 짜보자.

배열을 사용해 배열이 0번이 가장 오래된 페이지에 해당하도록 짜보려고 한다. 

 

  1. + 캐시가 0이면 cities 수만큼 *5 해서 바로 리턴
  2. 일단 빈 캐시 배열을 하나 만든다.
  3. cities로 for문을 돌린다.
  4. 도시 이름을 배열에서 하나 씩 가져오고 캐시 배열에 포함되어 있는지 확인한다.
  5. 있으면, 시간+1 하고, 해당 인덱스를 pop 배열 끝에 다시 append 한다. (참조시간 업데이트 개념으로)
  6. 없으면, 시간+5 하고
    1. 캐시 배열이 캐시 사이즈 보다 작은 경우, 새로운 도시를 배열에 그냥 append 한다.
    2. 캐시 배열이 캐시 사이즈 보다 큰 경우, 0번 인덱스를 pop해 없애고, 새로운 도시를 배열에 append 한다.
  7. 이런 식으로 for문을 종료하면 누적 시간을 리턴한다.

 

 

소스코드) 

* 1차) 

def firstCache(cacheSize, cities):

    if cacheSize == 0 :
        return len(cities) * 5

    cache_list = []
    time = 0
    for city in cities:
        city = city.lower()
        if city in cache_list:
            time += 1
            cache_list.append(cache_list.pop(cache_list.index(city)))
        else :
            time += 5

            if len(cache_list) < cacheSize :
                cache_list.append(city)
            else :
                cache_list.pop(0)
                cache_list.append(city)

    return time

 

리뷰) 

CS 지식까지 필요했던 문제 허허헛

덕분에 지식 하나 더 추가 했다.

LRU 방식을 공부하고 스스로 예시를 한번 만들어보니 로직 짜는 건 쉬었다. 

'Coding Test > Algorithm' 카테고리의 다른 글

순열  (0) 2023.03.18
Programmers] 멀리 뛰기  (0) 2023.03.18
Programmers] 괄호 회전하기  (0) 2023.03.14
Programmers] 최솟값 만들기  (0) 2023.03.13
Programmers] N개의 최소공배수  (0) 2023.03.07

📌 파이썬 으로 풀이

 

📌 문제 링크 :

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📌 문제 설명 :

다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.

  • (), [], {} 는 모두 올바른 괄호 문자열입니다.
  • 만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다.
  • 만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다. 예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다.

대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.

 

📌 제한 사항

  • s의 길이는 1 이상 1,000 이하입니다.

 

📌 입출력 예


추측) 

괄호짝을 배열로 만들어 준비한다. 

문자열 s를 리스트로 만들어 맨앞에 것을 pop해 뒤로 append해주는 방식으로 회전을 시키고 문자열로 합쳐준다 (처음 회전이 필요없는 경우는 그냥) 

그리고 그 문자열에서 괄호짝 배열 for문을 돌려 짝을 찾으면 삭제하는 방식을 반복한다. 

대신 3개의 괄호짝이 없을 경우 각각 flag를 0으로 바꾸어주고 모두 0이 되면 카운팅 없이 나오기

text길이가 0이되면 모두 지워냈으므로 올바른 괄호문자열이라 카운팅한다

이를 반복해서 마지막에 카운트를 반환

 

소스코드) 

* 1차) 실패 : 정확도 78.6

def solution(s):
    answer = 0
    bracket = ['()', '[]', '{}']
    s_list = list(s)
    for i in range(len(s)):
        text = ""
        if i != 0:
            s_list.append(s_list.pop(0))
            text = ''.join(one for one in s_list)
        else :
            text = s

        flag_list = [1, 1, 1]
        flag = True
        while flag:
            if len(text) == 0 :
                answer += 1
                break

            if flag_list == [0, 0, 0]:
                break

            for x in range(len(bracket)) :
                if bracket[x] in text:
                    text = text.replace(bracket[x], "")
                else:
                    flag_list[x] = 0
                    pass

    return answer

* 2차) 실패 : 정확도 92.9 😭 악 단하나의 케이스가

def solution(s):
    answer = 0
    bracket = ['()', '[]', '{}']
    s_list = list(s)
    for i in range(len(s)):
        text = ""
        if i != 0:
            s_list.append(s_list.pop(0))
            text = ''.join(one for one in s_list)
        else :
            text = s

        flag_list = [1, 1, 1]
        flag = True
        while flag:
            if len(text) == 0 :
                answer += 1
                break

            if flag_list == [0, 0, 0]:
                if text.find(bracket[0]) and text.find(bracket[1]) and text.find(bracket[2]):
                    break

            for x in range(len(bracket)) :
                if bracket[x] in text:
                    text = text.replace(bracket[x], "")
                else:
                    flag_list[x] = 0
                    pass

    return answer

* 3차) 성공

def solution(s):
    answer = 0
    bracket = ['(',')', '[',']', '{','}']
    s_list = list(s)
    for i in range(len(s)):
        if i != 0:
            s_list.append(s_list.pop(0))

        stack = []
        for one in s_list:
            stack.append(one)
            stack_len = len(stack)
            if stack_len >= 2:
                for x in range(0,len(bracket),2) :
                    if stack[stack_len-2:stack_len] == bracket[x:x+2]:
                        stack = stack[:stack_len-2]

        if len(stack) == 0 :
            answer += 1

    return answer

 

 

리뷰) 

 

1차)

플래그를 세울기점을 잘 생각해봐야 할듯하다.

왜냐면 지금 내 로직대로는 만약 ({}) 괄호 경우 () 차례에서 이걸 못찾아서 플래그를 0으로 넣고 {} 이걸 지우고 나서야 ()를 판별할 수 있는데 이미 플래그는 0이 됬기 때문

 

2차) 

통과하지 못한 1번 케이스 뭐지..  1번 케이스로 고민하다가 전에 이거랑 비슷한 문제를 풀었던게 생각나서 햄버거 문제에서 썼던 stack 방식을 응용하니 바로 3차에서 성공 오오오!!!! 이런 유형이 바로 스택 유형!

 

 

Programmers] 햄버거 만들기

📌 파이썬 으로 풀이 📌 문제 링크 : 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을

littlezero48.tistory.com

 

그런데! 3차 방식으로 통과한거랑 2차에 하나의 케이스만 실패한 경우를 비교하면 2차가 더 말도안되게 빠름... 

2차는 for/while/for 로 사용한 3중 문인데 훨씬더 속도가 빠르다 😯😯

2차가 통과하지 못한 케이스에 대해 좀더 생각해봐야할 듯 하다.

 

3차 결과
2차 결과

'Coding Test > Algorithm' 카테고리의 다른 글

Programmers] 멀리 뛰기  (0) 2023.03.18
Programmers] [1차] 캐시  (0) 2023.03.18
Programmers] 최솟값 만들기  (0) 2023.03.13
Programmers] N개의 최소공배수  (0) 2023.03.07
Programmers] 최댓값과 최솟값  (0) 2023.03.06

+ Recent posts