development/알고리즘
-
[백준] 2002: 추월development/알고리즘 2024. 4. 12. 23:41
안녕하세요. 이번 문제는 백준의 2002번 '추월' 입니다. 문제 코드 import sys n = int(input()) count = 0 origin = [sys.stdin.readline().rstrip() for i in range(n)] for i in range(n): s = sys.stdin.readline().rstrip() if origin[i - count] != s: count += 1 origin.remove(s) print(count) 알고리즘 캔버스 아이디어 원본 배열을 입력받아 origin에 저장 현재 배열을 입력받으면서 순서대로 원본 배열과 대조해봄 기존 배열과 현재 배열을 순서대로 대조했을때, 기존 배열 참조는 i를 기준으로 하되, (origin[i]) 이미 추월한 차의 개수..
-
[프로그래머스] 60057: 2020 KAKAO BLIND RECRUITMENT > 문자열 압축development/알고리즘 2024. 4. 5. 01:48
안녕하세요. 이번 문제는 프로그래머스의 60057번 입니다. 문자열을 압축하는 문제입니다. 문제 코드 def solution(s): result = set([len(s)]) for i in range(1,len(s)): result.add(len(string_zip(s, i))) return min(result) def string_zip(strs, n): result = "" target = strs[:n] count = 1 for i in range(n, len(strs), n): if strs[i:i+n] == target: count += 1 else: result += f"{count if count > 1 else ''}{target}" count = 1 target = strs[i:i+n] ..
-
[프로그래머스] 120812: 최빈값development/알고리즘 2024. 3. 29. 15:53
안녕하세요. 이번 문제는 프로그래머스의 120812번 입니다. 최빈값을 구하는 문제입니다. 문제 코드 def solution(array): d=dict() r=[] for i in range(len(array)): v = array[i] if v in d: d[v] = d[v] + 1 else: d[v] = 1 if len(r) > 0: if v in r or d[r[len(r)-1]] 1 else r[len(r)-1] 알고리즘 캔버스 아이디어 각 값마다의 빈도를 저장하는 dict(이하 d)와 현재 최빈값을 저장하는 ar..
-
[백준] 11047: 동전 0 (그리디)development/알고리즘 2024. 3. 22. 18:09
안녕하세요. 이번 문제는 백준의 11047번 입니다. 그리디 알고리즘을 사용해 푸는 문제입니다. 저는 요즘 푸는 문제들은 `알고리즘 디자인 캔버스(이하 캔버스)`를 제게 더욱 잘 맞게 수정해서, 템플릿화 시켜서 사용하고 있습니다. 그래서 해당 문제도 캔버스에 적어가며 풀었습니다. 문제 정리에 도움이 되는 것 같습니다. 참고로 그리디 알고리즘이란 매 상황에서의 가장 좋은 선택지를 고르는 알고리즘입니다. 그래서 특정 조건을 충족하지 않으면 일반적으로 최적의 해가 되기는 어렵습니다. 최적 값의 '근사값'이 목표입니다. 다음이 문제입니다. 실버 4 단계네요. 문제 코드 n, k = map(int, input().split()) n_l = list(map(int, [input() for i in range(n)]..
-
[프로그래머스] JadenCase 문자열 만들기development/알고리즘 2022. 9. 11. 23:04
안녕하세요. 이번 문제는 프로그래머스 2단계 - JadenCase 문자열 만들기 입니다. 정답률 81%의 쉬운 문제입니다. Jaden case라는 말을 이번 문제를 풀이하면서 처음 접해봤습니다. 견문을 넓힌 것 같아 기분이 좋습니다. 덤으로 이번 문제는 풀이 했더니 11점을 주더라구요. 아주 기분이 좋습니다. function solution(s) { let newWord = true; let result = ""; for (let i = 0; i < s.length; i ++) { const word = s[i]; if (word === " ") { result += word; newWord = true; } else { if (!isNaN(Number(word))) { result += word; } ..
-
[프로그래머스] 가장 큰 수development/알고리즘 2022. 8. 31. 17:33
안녕하세요. 이번 문제는 프로그래머스 2단계 - 가장 큰 수 입니다. 이번 문제는 빠른 정렬 알고리즘 중 하나인 퀵 소트를 사용해 풀어보려고 노력 했습니다. 이번 문제는 정렬 자체를 구현(In-place 방식은 아니지만..)하는 것은 쉬웠지만, 비교 식을 어떤식으로 잡아야 할 지에서 고민을 많이 했습니다. 풀이 후, 13점이라는 점수를 받아 기분이 좋았습니다. function quickSort(origin) { if (origin.length < 2) { return origin; } const left = []; const right = []; const [pivot] = origin; for (let i=1; i String(data) || "0")); if (answer[0] == '0') retu..
-
[프로그래머스] K번째 수development/알고리즘 2022. 8. 30. 16:31
안녕하세요. 이번 문제는 프로그래머스 1단계 - K번째 수 입니다. 이번 문제는 정렬 카테고리의 문제여서, 정렬을 직접 구현하는 것에 의의를 두었습니다. 당장 아는 정렬 알고리즘이 선택 정렬, 버블 정렬, 삽입 정렬 등의 기본 알고리즘뿐이고, 데이터의 양이 적기 때문에 아는 알고리즘 내에서 풀어보았습니다. 제가 풀이한 정답입니다. 정렬 함수는 가독성을 위해 분리했습니다. function selectionSort(answer, max) { for (let i = 0; i answer[j]) { ..
-
[프로그래머스] 위장development/알고리즘 2022. 8. 27. 18:20
안녕하세요. 이번 문제는 프로그래머스 2단계 - 위장 입니다. 이번 문제도 저번 글과 마찬가지로 해시 테이블을 사용해 해결해야 하는 문제입니다. 추가적으로 수학 공식이 필요해서, 수학 공식을 열심히 서치해서 풀었습니다. 문제가 조금 이상하다고 생각합니다. 이게.. 아무리 위장이라지만.. 상의와 바지는 필수로 입어야 하지 않을까요? 모든 옷 종류 중 한가지만 입어도 된다는게 조금 의아했습니다. 코트만 입고 다니면 바로 바바리맨 확정입니다. 우리는 모두 적절한 위장을 위해서 상의와 하의는 꼭 입는게 좋을 것 같습니다. 하지만 일단 문제가 요구하는 바를 따른 정답은 다음과 같습니다. function solution(clothes) { const hash = new Map(); for (let i=0; i