람다 표현식은 흔히 이름없는 함수라 불리며, 이것을 이용하면 함수를 간단하게 작성할 수 있다.

특정 기능을 수행하는 함수를 한 줄에 작성할 수 있다는 점이 특징이다.

# 일반적인 add() 메서드 사용
def add(a,b):
	return a+b
    
# 람다 표현식으로 구현한 add() 메서드
print((lambda a,b:a+b)(3,7))

※ (lambda 변수명: 연산식)(변수명)

 

# 내장 함수에서 자주 사용되는 람다 함수

array = [('홍길동', 50), ('이순신', 32), ('아무개', 74)]


def my_key(x):
    return x[1]


print(sorted(array, key=my_key))
print(sorted(array, key=lambda x: x[1]))

보통 정렬 함수의 경우에는 한번만 사용하고 다시 사용하는 경우가 없는 경우가 많다. 따라서 람다함수를 이용하도록  하자.

 

- 결과 화면

 

# 여러 개의 리스트에 적용

list1 = [1, 2, 3, 4, 5]
list2 = [6, 7, 8, 9, 10]

result = map(lambda a, b: a + b, list1, list2)

print(list(result))

list1와 list2에 lambda 함수가 적용되어 list1=a , list2=b의 변수에 매핑되어 연산이 이루어이게 된다.

따라서 서로 다른 리스트가 인덱스가 같은 원소끼리 더하기를 수행하게 되는 것이다.

 

 map(각각의 변수에 적용할 함수, 변수명들)

 

- 결과 화면

 

 

노드와 노드의 연결로 표현된 형태를 말하며 여기서 말하는 노드는 정보의 단위로서 어떠한 정보를 가지고 있는 개체이다.

 

# 특징

  • 트리는 부모 노드와 자식 노드의 관계로 정의된다
  • 트리의 최상단 노드를 루트 노드라고 한다
  • 트리의 최하단 노드를 단말 노드라고 한다
  • 트리에서 일부를 떼어내도 트리 구조이며 이를 서브 트리라 한다
  • 트리는 파일 시스템과 같이 계층적이고 정렬된 데이터를 다루기에 적합

-이진탐색트리

  • 부모 노드보다 왼쪽 자식 노드가 작다
  • 부모 노드보다 오른쪽 자식 노드가 크다
  • 왼쪽 자식 노드 < 부모 노드 < 오른쪽 자식 노드
  • 탐색 방법 : 부모 노드와 타켓 비교(더 작은 경우 왼쪽으로 이동, 더 클 경우 오른쪽으로 이동) -> 찾을 때까지 반복
  • 방문 순서 ex)37 : 30 - 48 -37

'Algorithm' 카테고리의 다른 글

유용한 표준 라이브러리 - itertools, heapq, bisect,collections, math  (0) 2021.04.27
람다 표현식  (0) 2021.04.26
이진탐색(Binary Search)  (0) 2021.04.16
BOJ - 15649번 - N과 M (1)  (0) 2021.04.15
BOJ - 18870번 - 좌표 압축  (0) 2021.04.08

3개지 변수 시작점, 중간점, 끝점을 이용하여 찾으려는 데이터와 중간점에 위치한 데이터를 반복적으로 비교하여 원하는 데이터를 찾는 것

탐색 범위가 2000만을 넘어가면 이진 탐색을 떠올려보자 => log(n)의 시간 복잡도가 필요한 경우

 

# 재귀 함수를 통한 이진 탐색
def binary_search(array, target, start, end):
    # 탐색 결과 일치하는게 없는 경우
    if start > end:
        return None
    mid = (start + end) // 2
    # 중간 지점이 찾는 데이터와 일치하는 경우
    if array[mid] == target:
        return mid
    # 중간 지점의 데이터가 찾는 데이터보다 클 경우
    elif array[mid] > target:
        return binary_sort(array, target, start, mid - 1)
    # 중간 지점의 데이터가 찾는 데이터보다 작은 경우
    else:
        return binary_sort(array, target, mid + 1, end)


# n(원소의 개수)과 target(찾고자 하는 문자열)을 입력하기
n, target = map(int, input().split())

# 전체 원소 입력받기
array = list(map(int, input().split()))

# 결과 출력
result = binary_search(array, target, 0, n - 1)

if result == None:
    print("원소가 존재하지 않습니다.")
else:
    print(result+1)

 

 

 

 

# 반복문을 이용한 이진 탐색
def binary_search(array, target, start, end):
    while start<=end:
        mid = (start + end) // 2
        # 찾은 경우 중간 지점 인덱스 반환
        if array[mid] == target:
            return mid
        # 중간 지점 데이터보다 찾는 데이터 값이 작은 경우
        elif array[mid] > target:
            end = mid -1

        # 중간 지점 데이터보다 찾는 데이터 보다 값이 큰 경우
        else:
            start = mid + 1

    return None

# n(원소의 개수)과 target(찾고자 하는 문자열)을 입력하기
n, target = map(int, input().split())

# 전체 원소 입력받기
array = list(map(int, input().split()))

# 결과 출력
result = binary_search(array, target, 0, n - 1)

if result == None:
    print("원소가 존재하지 않습니다.")
else:
    print(result+1)

'Algorithm' 카테고리의 다른 글

람다 표현식  (0) 2021.04.26
트리 자료구조 - 이진 탐색 트리  (0) 2021.04.16
BOJ - 15649번 - N과 M (1)  (0) 2021.04.15
BOJ - 18870번 - 좌표 압축  (0) 2021.04.08
BOJ - 11651번 - 좌표 정렬하기 2  (0) 2021.04.08

www.acmicpc.net/problem/15649

 

15649번: N과 M (1)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

def dfs(depth, N, M):
    if depth == M:
        print(' '.join(map(str, out)))
        return

    # 전체를 탐색 1,2,3,4
    for i in range(N):
        # 아직 방문하지 않았다면
        if not visited[i]:
            visited[i] = True   # 방문 처리
            out.append(i+1)     # 방문 기록
            dfs(depth+1, N, M)      # 깊이 우선 탐색
            visited[i] = False  # 방문 기록 제거
            out.pop()


N,M = map(int, input().split())
visited = [False] * N
out = []
dfs(0,N,M)

'Algorithm' 카테고리의 다른 글

트리 자료구조 - 이진 탐색 트리  (0) 2021.04.16
이진탐색(Binary Search)  (0) 2021.04.16
BOJ - 18870번 - 좌표 압축  (0) 2021.04.08
BOJ - 11651번 - 좌표 정렬하기 2  (0) 2021.04.08
BOJ - 11650번 - 좌표 정렬하기  (0) 2021.04.08

www.acmicpc.net/problem/18870

 

18870번: 좌표 압축

수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌

www.acmicpc.net

코드:

N = int(input())
data = list(map(int, input().split()))
sorted_data = list(sorted(set(data)))
result = {sorted_data[i]: i for i in range(len(sorted_data))}
# 제네레이터 생성하면서 출력
print(*[result[i] for i in data])

'Algorithm' 카테고리의 다른 글

이진탐색(Binary Search)  (0) 2021.04.16
BOJ - 15649번 - N과 M (1)  (0) 2021.04.15
BOJ - 11651번 - 좌표 정렬하기 2  (0) 2021.04.08
BOJ - 11650번 - 좌표 정렬하기  (0) 2021.04.08
BOJ - 10814번 - 나이순 정렬  (0) 2021.04.08

www.acmicpc.net/problem/11651

 

11651번: 좌표 정렬하기 2

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net

코드:

def solution(count):
    data = []
    for _ in range(count):
        temp = []
        x,y = map(int,input().split())
        temp.append(x)
        temp.append(y)
        data.append(temp)
    data.sort(key=lambda x: (x[1],x[0]))
    for i in range(len(data)):
        print(f'{data[i][0]} {data[i][1]}')



N = int(input())
solution(N)

'Algorithm' 카테고리의 다른 글

BOJ - 15649번 - N과 M (1)  (0) 2021.04.15
BOJ - 18870번 - 좌표 압축  (0) 2021.04.08
BOJ - 11650번 - 좌표 정렬하기  (0) 2021.04.08
BOJ - 10814번 - 나이순 정렬  (0) 2021.04.08
BOJ - 2108번 - 통계학  (0) 2021.04.08

www.acmicpc.net/problem/11650

 

11650번: 좌표 정렬하기

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net

코드:

def solution(count):
    data = []
    for _ in range(count):
        x,y = map(int,input().split())
        temp = []
        temp.append(x)
        temp.append(y)
        data.append(temp)
    data.sort(key=lambda x: (x[0],x[1]))
    for i in range(len(data)):
        print(f'{data[i][0]} {data[i][1]}')

N = int(input())
solution(N)

'Algorithm' 카테고리의 다른 글

BOJ - 18870번 - 좌표 압축  (0) 2021.04.08
BOJ - 11651번 - 좌표 정렬하기 2  (0) 2021.04.08
BOJ - 10814번 - 나이순 정렬  (0) 2021.04.08
BOJ - 2108번 - 통계학  (0) 2021.04.08
BOJ - 1427번 - 소트인사이드  (0) 2021.04.08

www.acmicpc.net/problem/10814

 

10814번: 나이순 정렬

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을

www.acmicpc.net

코드:

def solution(count):
    data = []

    for _ in range(count):
        data.append(list(input().split()))

    data.sort(key=lambda x: int(x[0]))

    for i in range(len(data)):
        print(f'{data[i][0]} {data[i][1]}')


N = int(input())
solution(N)

'Algorithm' 카테고리의 다른 글

BOJ - 11651번 - 좌표 정렬하기 2  (0) 2021.04.08
BOJ - 11650번 - 좌표 정렬하기  (0) 2021.04.08
BOJ - 2108번 - 통계학  (0) 2021.04.08
BOJ - 1427번 - 소트인사이드  (0) 2021.04.08
BOJ - 1181번 - 단어 정렬  (0) 2021.04.08

+ Recent posts