본문 바로가기

운동하는 개발자/알고리즘, 코딩테스트

(40)
HackerRank [String] Caesar Cipher /알고리즘 해커랭크 문제주소 : https://www.hackerrank.com/challenges/caesar-cipher-1/problem 난이도 : Easy 성공률 : 86% 문제 : 문자열 s를 k만큼 쉬프트 시켜라, 특수문자 제외, z를 넘어가면 다시 a로 돌아온다 풀이 : 1. k 값이 100이하의 수 이므로 선처리로 26의 나머지값만 쉬프트 2. 대문자 아스키값+k 했을때 소문자 영역에 들어갈 수 있으므로 기존 문자가 대문자인지 소문자인지 확인하는 조건 추가 답안 #!/bin/python3 import math import os import random import re import sys # Complete the caesarCipher function below. def caesarCipher(s, k): ..
programmers [level2] 괄호변환 /알고리즘 프로그래머스 / 2020 카카오 블라인드 채용문제 문제주소 : programmers.co.kr/learn/courses/30/lessons/60058 난이도 : Level2 문제 - 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 컴파일하여 로그를 보니 대부분 소스 코드 내 작성된 괄호가 개수는 맞지만 짝이 맞지 않은 형태로 작성되어 오류가 나는 것을 알게 되었습니다. 수정해야 할 소스 파일이 너무 많아서 고민하던 "콘"은 소스 코드에 작성된 모든 괄호를 뽑아서 올바른 순서대로 배치된 괄호 문자열을 알려주는 프로그램을 다음과 같이 개발하려고 합니다. 풀이 : 주어진 시나리오대로 구성 잘라서 확인하고 붙이고 자르고 남은거 ..
programmers [level2] 스킬트리 /알고리즘 프로그래머스 문제 주소 : https://programmers.co.kr/learn/courses/30/lessons/49993 난이도 : Level2 문제 - 선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다. 예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다. 위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다. 선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열..
programmers [level2] 프린터 /알고리즘 프로그래머스 문제 주소 : programmers.co.kr/learn/courses/30/lessons/42587 난이도 : Level2 문제 - 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 풀이 - 큐를 구성해놓고 순서가 궁금한 값의 위치를 저장해놓는다 하나씩 빼서 우선순위 맥스 값과 비교하고 최댓값이면 출력 아니면 맨뒤로 추가 이동시킬 때마다 위치 값도 같이 한 칸씩 변환 출력시킬 값의 인덱스가 0번이면 종료 답안 def solution(priorities, location): nNow..
programmers [level2] 다리를 지나는 트럭 /알고리즘 프로그래머스 문제주소 : https://programmers.co.kr/learn/courses/30/lessons/42583 난이도 : Level2 문제 - 트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딥니다. 풀이 : 큐로 다리를 구성해놓고 최대 무게를 비교해가며 다음 차량이 들어설 때 최대 무게가 초과한다면 0 push 아니라면 차의 무게 push 루프돌면서 1초씩 카운트 증가시키고 다리 pop 답안 def solution(bridge_length, weight, truck_weights): lBridge ..
HackerRank [Sorting] Insertion Sort - Part 2 /알고리즘 해커랭크 문제주소 : https://www.hackerrank.com/challenges/insertionsort2/problem 난이도 : easy 성공률 : 97.21% 문제 : 주어진 배열에서 순차적으로 열의 개수를 늘려가며 정렬 후 출력 정렬 후 출력 반복하라 풀이 1. 1번 인덱스와 0번 인덱스 비교 후 큰값을 오른쪽 하여 출력 2. 2번 인덱스와 1번인덱스 비교 후 1번이 크면 값 스왑 후 0번과 비교, 작으면 출력 이런식으로 뒤에서부터 앞으로 값 비교하여 스왑작업 답안 #!/bin/python3 import math import os import random import re import sys def printList(arr): for i in range(0, len(arr)): print(arr[..
HackerRank [Sorting] Insertion Sort - Part 1 /알고리즘 해커랭크 문제주소 : https://www.hackerrank.com/challenges/insertionsort1/problem?h_r=next-challenge&h_v=zen 난이도 : Easy 성공률 : 87.32% 문제 : 정렬되어있는 배열에서 가장 마지막 인덱스에 특정값을 추가하고 그 값이 삽입정렬로 자리를 찾아가는 과정을 출력하라 (단 매번 스왑 하는 방식이 아니라 맨 마지막 값은 가장 마지막에 값이 입력됨) 풀이 : 1. 리스트의 가장 마지막 인덱스값을 별도로 저장(nVal) 2. 리스트의 가장마지막 앞의 인덱스부터 별도 저장한 값(nVal)과 비교하여 앞의 인덱스 값이 클 경우 뒤에도 복사 3. 앞의 인덱스 값이 별도 저장 값보다 작을 경우 최초 가장 뒤에 있었던 값을 해당 인덱스 뒷칸에 삽입 4...
HackerRank [Implementation] Extra Long Factorials /알고리즘 해커랭크 문제주소 : https://www.hackerrank.com/challenges/extra-long-factorials/problem 난이도 : Medium 성공률 : 95.53% 문제 : 펙토리얼 함수를 구현하라 풀이 : 인자값을 -1해 주며 재귀 호출되도록 하고 인자 값이 1이면 종료 답안 #!/bin/python3 import math import os import random import re import sys # Complete the extraLongFactorials function below. def extraLongFactorials(n): if n >= 1: return n * extraLongFactorials(n-1) else: return 1 if __name__ == '__ma..