[파이썬] 반복문에서 인덱스와 요소 동시 순회 - enumerate
·
📜 Language/[python]
enumerate? 파이썬에서 for문으로 리스트와 같은 객체 순회할 때, enumerate로 요소의 순서(인덱스)와 요소를 동시에 순회할 수 있다. 리스트 말고 튜플, 딕셔너리에도 사용가능하다. 반복문(for 문) 다음과 같은 리스트가 있다고 생각해 보자. Arr = ['Vaundy', 'Kaze', 'Ayase'] 파이썬에서 for문으로 순회할 때 보통 다음과 같이 한다. for value in Arr: print(value) Vaundy Kaze Ayase 또 리스트의 인덱스를 순회할 때는 주로 다음과 같은 방법을 사용한다. for i in range(len(Arr)): print(i) 0 1 2 그럼 요소와 인덱스를 동시에 출력하고 싶을 때는 어떻게 해야 할까?라고 한다면 보통 다음과 같은 코드를..
[프로그래머스] 42626 더 맵게 (python 파이썬)
·
🧩 Problem Solving/[프로그래머스]
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr heap을 이용하는 문제. 되게 오랜만에 풀어본 유형이라 시간이 걸렸다. 여러 문제를 풀어보며 언제 heap을 쓰는 게 좋은지 연습해야겠다. 아이디어 문제를 해결하려면 scoville리스트에서 계속 가장 작은 값을 찾아서 return 해야 한다. min() 메서드의 시간 복잡도는 O(N)이다. 문제에서 주어진 리스트의 길이 최대가 크기 때문에 좀 더 효율적인 방법을 찾아야 한다. heap을 이용해서 우선순위 큐를 구현하면 시간을 단축할 수 있다. heappop의 시간 복잡도는 O(logN)이다. 전체 코드 i..
[프로그래머스] 42746 가장 큰 수 (python 파이썬)
·
🧩 Problem Solving/[프로그래머스]
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 리스트의 있는 숫자들을 나열해 가장 큰 수를 만드는 이해는 쉬운 문제. 숫자 나열의 대소관계를 잘 활용하면 해결할 수 있다. 아이디어 일단 수를 최대한 크게 만드는 원리를 알아야 한다. 3, 32, 34를 비교해 보면 34 > 3(33) > 32 순서대로 나열해야 한다. 또 32와 332를 비교하면 332가 32보다 앞에 와야 된다. 34와 343 를 비교해 보면 34가 343보다 앞에 와야 된다. (34343 > 34334) 이걸 풀어서 설명하면 34와 343은 34 -> 34343434... 343 -> ..
[프로그래머스] 42576 완주하지 못한 선수 (+딕셔너리 get) (python 파이썬)
·
🧩 Problem Solving/[프로그래머스]
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 난이도는 쉽지만, 익혀두면 좋은 기법들이 많다. 파이썬을 주력으로 쓰는 만큼 리스트 컴프리헨션을 많이 활용해야겠다. 아이디어 participant에 있는 이름을 key, 이름의 중복 개수를 value로 딕셔너리를 만들어준다. 그리고 completion를 순회하며 이름이 나올 때마다 -1 해준다. 문제에서 한 명의 선수만 완주하지 못했다고 했으므로 딕셔너리에서 value의 값이 1인 걸 찾아 return 해주면 된다. 전체 코드 def solution(participant, completion): dic ..
[프로그래머스] 42862 체육복 (python 파이썬)
·
🧩 Problem Solving/[프로그래머스]
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr n 명의 학생이 있고, 학생들은 고유 번호가 있다. 근데 학생들 중 몇 명은 체육복을 도난당했다. 여벌이 있는 학생은 체육복을 빌려 줄 수 있다. 근데 체육복을 빌려주는 것은 바로 앞번호(i - 1) 또는 뒷번호(i + 1)만 빌려줄 수 있다. 체육복이 있어야 체육 수업을 들을 수 있다고 했을 때, 최대 몇 명까지 들을 수 있을까? 아이디어 학생 번호를 인덱스로 하는 리스트를 1로 초기화해 준다. 그리고 여벌이 있는 학생은 +1, 도난당한 학생은 -1 해준다. 그리고 반복문으로 리스트를 순회하며 도난당한 학생..
[백준] 18110 solved.ac (+반올림 함수 round에 대해) (python 파이썬)
·
🧩 Problem Solving/[백준]
18110번: solved.ac 5명의 15%는 0.75명으로, 이를 반올림하면 1명이다. 따라서 solved.ac는 가장 높은 난이도 의견과 가장 낮은 난이도 의견을 하나씩 제외하고, {5, 5, 7}에 대한 평균으로 문제 난이도를 결정한다. www.acmicpc.net 주어진 크기 n에 대해 값을 입력받고, 절사 평균을 구하는 문제. 절사 평균은 문제 설명에 나와있다. 이 문제를 해결할 때 파이썬은 주의할 게 있는데, 파이썬에 내장되어 있는 round함수를 쓰면 오답처리된다. python에서 round함수를 사용한 반올림은 사사오입의 원칙을 따른다. 사사오입은 5에서 반올림 할때, 앞자리 숫자가 홀수면 올림, 짝수면 내림을 한다. print(round(1.5)) # 2 올림 print(round(2...
[자료구조] 큐(Queue) (python 파이썬)
·
📦 Data Structure
큐(Queue) 큐는 가장 먼저 넣은 데이터가 가장 먼저 나오는 자료구조다. 스택이랑 비교하면 스택은 입구가 1개인 통 같은 구조이고, 큐는 터널 같은 구조다. 가장 먼저 들어온 차가 가장 먼저 나간다. 이런 구조를 First In First Out(FIFO, 일명 피포)라고 한다. 큐에는 두개의 포인터가 존재한다. 하나는 rear, 다른 하나는 front다. rear에서는 Enqueue, front에서는 dequeue연산이 수행된다. 큐의 연산 - enqueue(): 큐가 가득찼는지 확인하고 가득차있지 않으면 rear 위치에 데이터 삽입. - dequeue(): 큐가 비어있는지 확인하고 비어있지 않으면 front위치에 있는 데이터 return하고 remove. - peek(): 큐의 front 위치에 ..
[자료구조] 스택(Stack) (python 파이썬)
·
📦 Data Structure
스택(Stack) 스택은 가장 나중에 넣은(push) 데이터를 가장 먼저 꺼내는(pop) 자료구조다. 이런 구조를 Last In First Out(후입선출, LIFO) 또는 First In Last Out(선입후출, FILO)라고 한다. 흔히 택배 트럭에 있는 택배 상자들을 생각하면 된다. 가장 나중에 넣은 택배 상자부터 먼저 꺼내니까 스택의 연산 - push(): 스택이 가득 찼는지(isFull) 확인하고 가득 차있지 않으면 top 다음 위치에 데이터 삽입. - pop(): 스택이 비어있는지(isEmpty) 확인하고 비어있지 않으면 top위치에 있는 데이터 return 하고 삭제. - peek():스택의 top에 있는 데이터 return. - isFull(): 스택이 가득 찼는지 확인. 스택의 사이즈와..