본문 바로가기

Algorithm

(109)
[Python] 튜플 정렬 파이썬에서는 튜플을 원소로 하는 리스트가 있을 때, 그 리스트를 정렬하면 기본적으로 각 튜플을 구성하는 원소의 순서에 맞게 정렬된다는 특징이 있다. 예를 들어 튜플이 3개의 원소로 구성된다면 모든 원소가 첫 번째 원소의 순서에 맞게 정렬되고, 첫번째 원소의 값이 같은 경우 두 번째 원소의 순서에 맞게 정렬되고, 거기에 두 번째 원소의 값까지 같은 경우 세 번째 원소의 순서에 맞게 정렬된다. 아래의 소스코드를 보자. 소스코드 a = [(5, 1, 5), (3, 5, 5), (3, 1, 9), (3, 1, 1)] a.sort() print(a) 결과 [(3, 1, 1), (3, 1, 9), (3, 5, 5), (5, 1, 5)] 또한 리스트의 원소를 정렬할 때는 sort() 함수의 key 속성에 값을 대입하..
[Python] 람다(Lambda) 표현식 람다 표현식은 익명 함수를 만들때 사용한다. 함수를 간편하게 작성할 수 있어서 다른 함수의 인수로 넣을 때 주로 사용한다. 람다 표현식은 다음과 같이 사용한다. lambda 매개변수 : 표현식 바로 예시를 살펴보자. 1. def() 우리는 두 수를 더하는 함수를 만들때 다음과 같이 작성한다. >>> def hap(a, b): ... return a + b ... >>> hap(10, 20) 30 이를 람다 표현식으로 쓰면 다음과 같이 간결하게 쓸 수 있다. >>> (lambda a,b: a + b)(10, 20) 30 2. map() 람다식은 map()함수와도 응용하여 사용할 수 있다. >>> map(lambda a: a ** 2, range(5)) [0, 1, 4, 9, 16] >>> list(map(..
[Algorithm] 특정 거리의 도시 찾기 문제는 다음의 링크에서 확인하자. https://www.acmicpc.net/problem/18352 18352번: 특정 거리의 도시 찾기 첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X가 주어진다. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) 둘째 줄부터 M개의 줄에 걸쳐서 두 개 www.acmicpc.net 이 문제를 해결하기 위해 다음과 같은 아이디어를 생각해보았다. 일반적으로 그래프에서 모든 간선의 비용이 동일할 때는 BFS를 이용하여 최단 거리를 찾을 수 있다. 다시 말해 이 문제는 '모든 도로의 거리는 1' 이라는 조건 덕분에 너비 우선 탐색을 이용하여 간단히 해결할 수 있다. 먼저 특정..
[Algorithm] 치킨 배달 문제는 다음의 링크에서 확인하자. https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 이 문제를 풀기 위해 다음과 같은 아이디어를 생각해보았다. 전체 치킨 집의 수에서 M개를 선택하는 것은 조합의 개념이므로 조합을 사용하기로 했다. 그렇게 치킨집을 선택할 수 있는 모든 경우를 구한 후, 각 경우에 따른 모든 집과 해당 치킨집 까지의 거리의 합을 구해 그 중 최솟값을 답으로 출력하도록 코드를 짜보았다. # 치킨 배달 from i..
[Algorithm] 기둥과 보 설치 이 문제는 2020 카카오 신입 공채 코딩테스트에 출제되었던 문제이다. 아래의 링크를 참고하자. https://school.programmers.co.kr/learn/courses/30/lessons/60061?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이 문제는 전형적인 시뮬레이션 문제이다. 문제에서 제시한 구체적인 처리 과정을 프로그램 상에서 차례대로 수행하여 결과를 도출하면 된다. 이 문제의 전체 명령의 개수는 1,000개이하이며 제한 시간은 5초로 넉넉한 편이다. 따라서 O(M^3)의 시간복잡도 알고리즘을 사용해도..
[Python] 알파벳 순서대로 정렬하기 1. sorted() 함수를 이용하여 정렬하기Python의 sorted()함수는 요소 값으로 반복 가능한 객체를 정렬하는 데 사용된다. 이미 알고 있듯이 파이썬 문자열은 반복 가능한 객체다. 따라서 sorted() 함수를 사용하여 문자열을 알파벳순으로 정렬할 수 있다. 다음의 예시를 보자. data = 'chaeso'print(sorted(data)) 결과는 다음과 같다. ['a', 'c', 'e', 'h', 'o', 's'] 하지만 문제가 있다. 위의 방법은 문자를 오직 리스트의 형태로 문자열을 출력하는 것만 가능하다. 우리가 원하는 것이 data라는 문자열 변수 자체를 정렬하고 싶은 것이라면 아래의 방법을 사용하도록 하자. 2. str.join() 함수를 이용하여 정렬하기str.join() 함수는 i..
[Python] ImportError: No module named '_curses' 에러 이 에러는 curses 모듈이 윈도우를 지원하지 않아서 생기는 에러이다. 다음과 같은 명령어를 입력해보자. pip install windows-curses
[Python] 알파벳을 숫자로 만들기 (아스키코드) 알파벳 A 또는 a를 숫자 1에 대응시키는 법에 대해 알아보자. 우선 아스키코드가 무엇인지부터 알아야 한다. 아스키코드는 영문 키보드로 입력할 수 있는 모든 기호들이 할당되어 있는 가장 기본적인 부호 체계이다. 알파벳 A의 아스키코드는 65, a의 아스키코드는 97임을 확인할 수 있다. 파이썬에는 아스키코드 변환과 관련된 함수가 2가지 있다. 1. ord(문자) 하나의 문자를 인자로 받고 해당 문자에 해당하는 유니코드 정수를 반환한다. ex) ord('a') -> 정수 97을 반환 2. chr(숫자) 하나의 정수를 인자로 받고 해당 정수에 해당하는 유니코드 문자를 반환한다. 인자(정수)의 유효 범위는 0 ~ 1,114,111 (16진수 0x10 FFFF)까지 입니다. chr(97) -> 문자 'a'를 반..