목록자료구조 (15)
DevSSOM
연습문제 : 중복된 하나의 숫자 찾아내기 숫자들의 배열이 주어짐. 이 배열은 길이 n을 가지며, 1부터 n-1까지의 숫자로 이루어져 있음. 모든 숫자가 배열에 단 한번씩만 나타남. 그런데, 딱 하나의 수가 배열에 두 번 등장함. 이 중복되는 숫자를 찾아내봐. 예를 들어서, [1, 5, 2, 4, 5, 6, 3] 를 살펴보면, 배열의 길이는 7이며, 따라서 1~6까지의 숫자들이 한번씩 등장. 그런데 5만 한번 더 등장한 것. 따라서 이 경우에는 5를 찾아내면 됨. def findDuplicate(nums): return 0 def main(): print(findDuplicate([1, 5, 2, 4, 5, 6, 3])) if __name__ == "__main__": main() >>> 내가 작성해본 답..
연습문제 : 가장 큰 두 수의 차 보다 큰 정수들의 배열이 주어졌다고 하자. 여기서 가능한 모든 서로 다른 두 숫자의 차이를 고려해보고, 이중 가장 큰 차이를 반환하는 함수를 적어봐. 예를 들어서, [2, 8, 19, 37, 4, 5, 12, 50, 1, 34, 23] 가 입력으로 주어졌을 경우 가장 큰 차이를 내는 숫자쌍은 50-1 = 49임. 두 수의 차에 해당하는 값을 반환하면 됨. 위 예시의 경우, 49를 반환함. 양의 값을 반환해야 함. 위 예시의 경우 -49가 아니라 49를 반환해야 함. 배열의 길이는 2보다 크거나 같다고 가정. 이 문제에는 여러 종류의 풀이법이 존재함. 각 풀이법의 시간 복잡도를 고려하면서 여러가지 방법으로 문제를 풀어봐. def maxTwoDiff(nums): nums.s..
알고리즘이 얼마나 효율적인지 측정하는 기준 시간복잡도 : 코드가 얼마나 빠르게 작동하냐. 시간복잡도가 커지면 코드는 느려지고, 시간복잡도가 낮아지면 코드는 빨라짐. 공간복잡도 : 코드가 얼마나 많은 메모리를 사용하냐. 공간복잡도가 커지면 메모리를 많이 차지하고, 공간복잡도가 낮아지면 메모리를 적게 차지해. 보통 코드의 효율성을 얘기할 때 공간복잡도보다 시간복잡도에 더 초점을 맞춰서 얘기하긴해. 시간복잡도(Time-complexity) 알고리즘에 사용되는 총 연산횟수. 어떤 알고리즘 안에서 연산을 몇번 하는가? 알고리즘이 진행되는데 걸리는 실행시간이 아니라, 연산횟수라는거에 유의. sum = 0; # 여기서 연산 1번 for i in [1, 2, 3, 4]: # 연산 4번 sum +=i; # 시간복잡도 =..
연습문제 : 자동차 객체 Python은 세상의 모든 것을 객체(object)로 바라봄. 이 문제에는 자동차 객체가 주어져 있는데, 아직 불완전한 상태임. 객체에 변수와 함수들을 추가해서 완성해봐. 변수 color를 추가. 함수 speedDown을 추가. 함수 changeColor를 추가. 함수 wheelChange의 내용을 변경. class Car: def __init__(self): self.speed = 0 self.year = 2017 self.wheel = Wheel("aluminum") # 1. 여기에 새로운 오브젝트 변수, color를 추가 해 주세요. # 색은 기본적으로 "white"로 설정되도록 해 주세요 def speedUp(self, addSpeed): self.speed += addS..
연습문제 : 두 수의 합 숫자들의 배열이 주어지고 표적 숫자가 주어졌다고 하자. 배열에 주어진 숫자들 중 두 개의 숫자를 더하면 표적 숫자가 되는데, 이때 어떤 두 수를 더하면 표적숫자가 되는지 찾는 문제를 풀어봐. 예를 들어서, [2, 8, 19, 37, 4, 5] 가 배열로 주어지고 12 가 표적으로 주어지면 8,4 를 찾아내면 됨. 입력 배열에는 중복되는 수가 없음. 입력 배열에는 합해서 표적이 되는 어떤 두 수가 반드시 있음. 출력의 순서는 상관 없음. 위 예시의 경우, 8,4 와 4,8은 둘 다 정답으로 인정. def twoSum(nums, target): for n in nums: if (target - n) in nums: return n, (target - n) def main(): pri..
프로그램은 입력(input), 실행(process), 저장(strore), 출력(output)으로 구성됨. 그림의 화살표는 데이터의 흐름과 저장, 즉 어떤 자료구조의 데이터를 어떻게 저장해서 보낼 것인지를 보여줌. 실행(process)에 해당하는 사각형에서 거의 모든 프로그램의 실행 방식이 결정되기 때문에, 이 단계가 가장 알고리즘과 연관이 있어. 알고리즘은 효율적인 프로그래밍을 위해서 시간과 공간의 복잡성을 고려해서 짜여져야 되기 때문에, 시간과 공간의 효율성이 알고리즘과 연관돼. 자료구조(Data Structure) 프로그램이 돌아가기 위해서는 많은 값들을 저장하고, 기억해야 됨. 이때 이 값들을 어떻게, 그리고 어디에 저장하면 좋을까?에 자료구조가 활용됨. 자료구조에는 여러 종류가 있음. 가장 간단..
최댓값 기계 이번 문제에서는 최댓값 기계를 만들어 봅니다. 이 최댓값 기계는 숫자를 여러개 담을 수 있으며, 담겨있는 숫자들 중에서 최댓값을 반환할 수 있습니다. 조금 더 자세히 이야기하면, 다음의 기능을 지원합니다. machine.addNumber(x) : 숫자 x를 최댓값 기계 machine에 추가합니다. machine.removeNumber(x) : 숫자 x를 최댓값 기계 machine으로부터 제거합니다. 만약 숫자 x가 최댓값 기계 내에 없다면 아무 일도 일어나지 않습니다. machine.getMax() : 최댓값 기계 machine이 갖고있는 숫자들 중 최댓값을 반환합니다. 예를 들어, 최댓값 기계의 이름이 myMachine이고 숫자 2, 5, 3, 4 를 각각 추가하기 위해서는 다음의 명령어를..