Starbucks Caramel Frappuccino
본문 바로가기
  • 그래 그렇게 조금씩

Algorithm Study/PS7

[python3] 정수를 나선형으로 배치하기 (프로그래머스) 문제만 읽으면 아 그렇구나~ 했는데 막상 코드로 옮기려니 머리가 아팠다. 2차원 배열에 아직 익숙하지 않아서 row col 이러다가 으아아아ㅏㅏ 하고 말았던.. 관련 풀이를 많이 찾아봤는데 여전히 너무 복잡한 풀이 방식이었고 가장 괜찮은 풀이법을 찾아서 정리해보려고 한다. 입출력 예시를 보면 행, 열을 표로 그려놨는데, 여기서 행을 i, 열을 j라고 하자. 첫번째 칸에는 1이 들어간다. 이 숫자는 n *n의 값에 도달할 때 까지 계속 1씩 증가한다. -> cnt라는 변수로 만들자. cnt의 증가를 따라가보면 우측으로 가다가, 마지막 열에 닿았을 때 아래로 내려가고, 마지막 행에 닿았을 때 왼쪽으로 이동하고 맨 처음 열에 닿으면 위로 올라간다. ➡️ ⬇️ ⬅️ ⬆️의 순서인 것이다. (이동의 순서가 있고,.. 2023. 9. 14.
Linked List 연결 리스트 / Queue 큐 / Stack 스택 Linked List란? 'Node' 구조체가 연결되는 형식으로 데이터를 저장하는 자료구조이다. 노드(Node)에는 데이터 값 + 다음 노드의 주소값이 저장되어 있다. (양방향 링크드 리스트의 경우 노드에서 이전 노드의 주소값도 가지고 있음.) Array List의 경우 데이터의 연속성을 유지하기 위해서 메모리에 순차적으로 데이터를 저장했지만, 연결 리스트는 다음 노드의 주소 정보를 통해서 연결되어 있기 때문에 물리적으로는 비연속적이지만, 논리적으로는 연속성을 유지하고 있다. -> Array List는 데이터가 메모리에 쫙 붙어 있지만, Linked List는 메모리상에서 연속성을 유지하지 않아도 되기 때문에 (메모리 내에서 노드가 따로 따로 떨어져 있기 때문에) 메모리 공간의 사용이 더 자유롭다. 하지.. 2023. 7. 12.
기본개념) 자료구조, 알고리즘, List, 선택정렬, 병합정렬 # ⭐️ Abstract Data Type(추상적 자료형_ ADT) ''' 문제를 해결하기 위해 필요한 '자료의 형태 및 연산을 수학적으로 정의'한 모델 ex.집합, 리스트, 스택, 큐, 트리 등 vs Data Structrue(자료 구조) 추상적 자료형에서 정의한 연산들을 '구현한' 구현체 ex. 배열, 연결 리스트 등 알고리즘 반복되는 문제를 해결하기 위한 일련의 절차나 방법 ex. 정렬, 이진 탐색 등 ''' # ⭐️ 시간 복잡도와 공간 복잡도 ''' 시간 복잡도(Time Complexity) 알고리즘이 실행되는 데 소요되는 시간을 측정. 주어진 입력 크기에 따라 얼마나 빠르게 실행되는지? 주로 Big O(빅오) 표기법을 사용해서 표현하며, 알고리즘의 성능을 나타냄. 일반적으로 시간 복잡도가 작을수.. 2023. 7. 5.
[Swift] 백준 1000번 A+B 터피의 야금야금 알고리즘 import Foundation let input = readLine()! let result = print(input.components(separatedBy: " ").map { Int($0)!}.reduce(0, +)) 입력값을 공백을 기준으로 나눌 때 .split을 쓸 수도 있는데, .split은 Swift 표준 라이브러리에 있어서 import Foundation을 안 해도 되는 장점이 있다. 또한 separator 이외에 다양한 파라미터가 존재한다. return 타입은 [SubString]이다. .components는 import Foundation이 필요하다. 파라미터는 separatedBy 딱 하나다. return 타입은 [String]이다. 이 문제에서는 정수리터럴.. 2023. 4. 13.
0단계🐥 - 짝수의 합 고차함수를 활용할 수 있다. import Foundation func solution(_ n:Int) -> Int { (1...n).filter { $0 % 2 == 0}.reduce(0, +) // (1...n).filter { $0 % 2 == 0}.reduce(0) { $0 + $1 } } n이 정수이기 때문에 1부터 n까지 .filter를 활용해 짝수 배열을 만든다. (filter는 배열을 return하니) 해당 짝수배열에서 .reduce를 통해 합을 구한다. 주석 처리된 부분의 형태를 많이 접했었는데 .reduce(0, +)와 같이 연산자를 활용할 수도 있다. 2023. 4. 4.
0단계🐥 - 나눗셈 Int, Float, Double 아주 간단한 문제이지만.. 삽질을 한 번 했다. 삽질 보다는 배운듯! 기본 연산자의 경우 / * % 가 있지 않은가? 그런데 정수 / 정수는 몫이 나오고 나머지를 얻기 위해서는 정수 % 정수, 즉 모듈러 연산자를 사용해야 한다. 입출력 예시를 보면 그냥 나누고 곱하고 소숫점 빼고 정수 부분만 리턴하라! 니까 우선 파라미터들을 실수로 바꿔줘야겠다 생각했다. 나누기 편하게 그래서 Double로 타입을 바꿔줬는데.. 처음에 코드실행(테스트)는 다 통과하길래 ㅇㅋ~ 하고 그냥 넘기려 했는데 오잉 제출하면서 테스트케이스가 늘어나니까 시간초과 에러가 나는거다.. 헐 혹시 Float으로 했어야 하나 하고 Float으로 하니까 된다. Float와 Double은 부동 소수점을 사용하는 실수며 부동소수 타입이다. Floa.. 2023. 3. 18.