알고리즘 20

[프로그래머스] Lv2. 삼각 달팽이

https://school.programmers.co.kr/learn/courses/30/lessons/68645 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 예시 입출력 제한 사항n은 1 이상 1,000 이하입니다. 처음 시도def solution(n): # n개의 빈 리스트를 생성한다. answer = [[] for _ in range(n)] # 채워진 배열을 나타내는 리스트 full = [False for _ in range(n)] # 젤 아래 리스트를 나타내는 수 ground = n - 1 # 위로 갈지(1..

[프로그래머스] Lv2. 행렬 테두리 회전하기

https://school.programmers.co.kr/learn/courses/30/lessons/77485 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제일단, 위 문제 설명만을 읽었을 때 한번에 이해되지 않았다. 아래의 예시를 통해 쉽게 이해할 수 있었다. 예시 위의 왼쪽 예시는 rows와 columns가 각각 6, 6으로 주어졌을 때의 초기 행렬의 모습이다.이때, queries도 함께 주어지는데, queries의 첫 번째 요소인 [2, 2, 5, 4] 리스트를 적용했을 때의 예시이다.[2, 2, 5, 4] 리스트의 의미는 직사각형의 범위를 지정..

[프로그래머스] Lv2. 거리두기 확인하기

문제 설명P: 사람X: 파티션O: 테이블사람과 사람 간의 거리는 맨해튼 거리 2 이하일 경우 코로나 바이러스 감염 예방 규칙을 위배하는 것이다.맨해튼 거리란 두 사람의 좌표가 각각 (x1, y1), (x2, y2)일 때, |x1-x2| + |y1-y2|의 크기를 의미한다.각각의 강의실에 배치된 사람들이 감염 예방 규칙을 잘 이행한 경우 1, 이행하지 않은 경우 0을 반환하고,최종적으로 각각의 강의실에 대한 반환을 하나의 리스트에 담아 반환하면 된다. 제한 사항제한 시간 : 10초 입출력 예시 첫 번째 시도def check_border(place, i, j): border = [(-1,-1), (-1,0),(-1,1),(0,1),(1,1),(1,0),(1,-1),(0,-1)] for dx, dy..

[프로그래머스] Lv2. 행렬의 곱셈

https://school.programmers.co.kr/learn/courses/30/lessons/12949?language=python3 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해라. 입출력 제한 사항행렬 arr1, arr2의 행과 열의 길이는 2이상 100 이하입니다.행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.곱할 수 있는 배열만 주어집니다. 답 도출가능하다면 나는 기본적으로 항상 문제를 가장 단..

[프로그래머스] 외계어 사전 문제 : sort와 sorted

문제 설명입력 파라미터spell : 알파벳이 담긴 리스트dic : 외계어 문자열이 담긴 리스트→ spell에 담긴 알파벳을 한번씩만 모두 사용한 단어가 dic에 있다면 1 반환, 없다면 2 반환입출력 예spelldicresult["p", "o", "s"]["sod", "eocd", "qixm", "adio", "soo"]2["z", "d", "x"]["def", "dww", "dzx", "loveaw"]1["s", "o", "m", "d"]["moos", "dzx", "smm", "sunmmo", "som"]2슈도 코드# dic의 모든 요소를 조회# 조회한 문자열 요소를 리스트로 만든다. -> 어떻게?# 리스트를 sort() 한다.# spell 리스트도 sort() 한다.# 비교한다. 있으면 1 리턴풀이..

[LeetCode] 179. 가장 큰 수

https://leetcode.com/problems/largest-number/ 문제 이해 정수형의 요소를 가진 리스트가 입력으로 주어질 때, 이들을 붙여서 가장 큰 숫자가 되도록 이어 붙인 후 출력하라. 생각한 알고리즘 1. 리스트의 각 요소의 첫 번째 자리 기준으로 내림차순 정렬해야한다. 2. 첫 번째 자리끼리의 비교를 위해서 각 요소를 str으로 변환해야한다. 3. str[0]을 기준으로 내림차순 정렬한다. 4. str[i] 값이 동일한 경우 값이 동일한 요소들끼리 재정렬한다. 5. str[i+1] 값에 따라 내림차순 정렬한다. str[i+1] 값이 None인 경우 str[0] 값과 동일한 값으로 가정한다. 이렇게 각 자리마다 내림차순을 하고, 현재 자리의 값이 동일한 경우, 다음 자리 값을 내림..

[백준] 10814번: 나이순 정렬

문제 https://www.acmicpc.net/status?user_id=daum4572&problem_id=10814&from_mine=1 """ 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어짐. 회원들의 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬. """ 수정 전 코드 import sys input = sys.stdin.readline class Solution(): def ageSort(self): N = int(input().rstrip()) judge = list() for i in range(N): age, name = input().rstrip().split(" ") judge.append((int(age), name)) judge..

알고리즘/백준 2024.01.17

[자료구조/알고리즘] 학습 2주차 회고

느낀 점 오늘 알고리즘 공부 2주차 공부가 끝이 났다.. 이번 주차에는 "심화 자료구조 학습" 주간이었다. 그래프 + DFS BFS + 백트래킹 트리 / 이진 트리 최소 신장 트리 Simpulation / Implementation 위와 같은 주제로 한 주간 알고리즘 문제를 풀었다. 백준 S3 ~ G4 범위의 문제가 다수였다.. 현재 파이썬으로 코드를 작성하고 있는데, 아직 문법에 자유롭지 못해서 알고리즘 구조를 만드는 것과 더불어 문법을 계속 검색해가며 적용되는지 검증을 거치는 시간이 필요해 시간이 많이 소요되었다.. 하지만 점점 파이썬에 적응되고 있어 알고리즘 문제를 푸는 데 있어 유리할 것 같다. 1. 그래프 + DFS 전화 번호 문자 조합(https://leetcode.com/problems/le..

알고리즘 2024.01.16

[백준] 17144번: 미세먼지 안녕!

문제 이해 R(행) × C(열)을 입력으로 받고, T(초)를 입력받는다. R × C 크기 만큼의 숫자를 입력 받는다. 이때, 1번 째 열에 공기청정기가 설치되고 -1로 나타낸다. 확산 순환 문제 풀기 from sys import stdin from typing import List ccw = globals() def rotate(A: List[List[int]]) -> List[List[int]]: for i in range(ccw-2, -1, -1): A[i+1][0] = A[i][0] for i in range(0,C,1): A[0][i] = A[0][i+1] for i in range(0,ccw): A[i][-1] = A[i+1][-1] for i in range(C,1,-1): A[ccw][i] ..

알고리즘/백준 2024.01.15

[LeetCode 543] 이진 트리의 직경

소요 시간 : 90m 문제 이해 이진 트리의 루트가 주어지면 트리 지름의 길이를 반환합니다. 이진 트리의 직경은 트리의 두 노드 사이에서 가장 긴 경로의 길이입니다. 이 경로는 루트를 통과할 수도 있고 통과하지 않을 수도 있습니다. 두 노드 사이의 경로 길이는 두 노드 사이의 간선 수로 표시됩니다. 이진 트리의 루트가 주어지면 트리 지름의 직경 : 트리의 두 노드 사이에서 가장 긴 경로의 길이 두 노드 사이의 경로 길이는 두 노드 사이의 간선 수로 표시된다. 일단 주어진 노드 구조를 보자. class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right 일반 노..