input() 함수
- 사용자가 입력한 내용은 문자열 형태로 반환한다.
name = input("이름을 입력하세요: ")
print("안녕하세요,", name)
- 숫자 타입으로 바꾸고 싶다면, int() 함수나 float() 함수를 사용하여 문자열을 정수나 부동 소수점 숫자로 변환할 수 있다.
num_input = int(input("정수를 입력하세요: "))
print("입력된 정수:", num_input)
- 사용자의 입력을 받을 때, 개행 문자(Enter)를 입력으로 받아들인다. 따라서 사용자가 입력을 완료하려면 Enter 키를 눌러야 한다.
- 띄어쓰기로 구분된 여러 개의 문자 입력을 받고 싶다면, split() 함수를 이용한다.
- 띄어쓰기로 구분된 여러개의 문자 입력을 리스트에 넣고 싶은 경우, list() 함수를 이용한다.
Q. 띄어쓰기로 구분된 여러 개의 숫자 입력을 리스트에 넣고 싶다면 어떻게 코드를 작성해야 할까?
정답은..?!
number = list(map(int, input().split()))
정렬
- sort()
- 원래 리스트를 정렬된 상태로 바꿈.
- 리스트의 내용이 직접 변경되므로, 별도의 새로운 리스트를 생성하지 않음.
- 기본값은 오름차순 정렬, reverse옵션 True는 내림차순 정렬
my_list = [3, 1, 4, 5, 2]
my_list.sort()
print(my_list) # 출력: [1, 2, 3, 4, 5]
my_list.sort(reverse=True)
print(my_list) # 출력: [5, 4, 3, 2, 1]
- sorted()
- 리스트를 인자로 받아 정렬된 새로운 리스트를 반환함. 원본 리스트는 변경되지 않음.
- 새로운 정렬된 리스트를 반환하므로, 원본 리스트는 유지됨.
- 어떠한 이터러블 객체에도 적용 가능함.
- reversed() 메서드를 통해 반대로 만듦. 단, iterable 한 객체를 반환하므로 다시 list() 메서드를 통해 리스트 형으로 변환해줘야 함.
- reversed() 메서드는 내림차순 정렬이 아닌, 순서를 반대로 만드는 것에 주의하기.
my_list = [3, 1, 4, 2, 5]
sorted_list = sorted(my_list)
print(sorted_list) # 출력: [1, 2, 3, 4, 5]
print(my_list) # 출력: [3, 1, 4, 2, 5] (원본 리스트는 변하지 않음)
reversed_list = reversed(sorted_list)
print(reversed_list) # 출력: <list_reverseiterator object at 0x7f26e46125c0>
print(list(reversed_list)) # 출력: [5, 4, 3, 2, 1]
print(list(reversed(my_list))) # 출력: [5, 2, 4, 1, 3]
이터러블(Iterable) 객체
- 반복 가능한 객체
대표적인 이터러블 객체
1. 리스트(List): 순서가 있는 요소들의 모음으로, 대괄호 []로 정의됨.
2. 튜플(Tuple): 리스트와 비슷하지만, 수정할 수 없는(immutable) 시퀀스. 소괄호 ()로 정의됨.
my_tuple = (1, 2, 3, 4, 5)
3. 문자열(String): 문자들의 시퀀스입니다. 작은따옴표 ' '나 큰따옴표 " "로 정의됨
4. 집합(Set): 고유한 요소들의 모음으로, 중괄호 {}로 정의됨.
my_set = {1, 2, 3, 4, 5}
5. 사전(Dictionary): 키와 값의 쌍으로 이루어진 컬렉션으로, 중괄호 {}와 콜론 :로 정의됨
my_dict = {'a': 1, 'b': 2, 'c': 3}
6. 파일 객체(File Object): 파일에서 읽은 데이터나 파일에 쓴 데이터를 포함하는 객체
7. 반복자(Iterator): __iter__()와 __next__() 메서드를 구현한 객체로, 이터러블 객체를 생성함.
다신 [길드원 구하기] 문제로 돌아와서 제가 푼 문제 코드를 공유해 보도록 하겠습니다. 문제 설명은 유튜브에서 확인해 주세요~
n = int(input())
fear = list(map(int, input().split()))
fear.sort()
sum = 0 # 길드 수
cnt = 0
for i in range(len(fear)):
for j in range(fear[i] - 1):
if fear[i+j+1] <= fear[i]:
cnt += 1
if cnt == fear[i] -1 :
remain -= fear[i]
sum += 1
i += fear[i]
else:
i += 1
print(sum)
동빈나 씨와 비교해서 제 코드의 아쉬운 점은
이중 for 문으로 시간 복잡도가 훨씬 높다. 이중 for문으로 한 이유는 i번째 공포도와 같은 그룹이 될 수 있는 길드원들의 공포도를 비교하기 위함이었는데, 동빈나 씨 코드를 보니 하나의 for문으로 비교 중인 그룹에서 쓰는 변수를 지정한 후, 그룹이 바뀌면 변수를 다시 초기화하는 방법을 사용했다. 그룹 결성 조건문을 통해 그룹의 길드원 변수를 초기화한 점이 굉장히 효율적인 것 같다는 생각을 했다. 최대한 이중 for문은 쓰지 않는 방향을 고민해 보는 자세를 길러야겠다고 생각했다.
n = int(input())
fear = list(map(int, input().split()))
fear.sort()
sum = 0 # 길드 수
cnt = 0
for i in range(len(fear)):
cnt += 1
if (cnt >= fear[i]):
sum += 1
cnt = 0
print(sum)
내가 만든 코드를 기반으로 동빈나 씨 코드를 참고해 더 효율적으로 수정했다.
나동빈 채널을 보면서 코딩 테스트를 준비하고 있습니다!
https://www.youtube.com/watch?v=2zjoKjt97vQ&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=3
24:00초에 나오는 [모험가 길드] 문제
'코딩 테스트 일지 📒' 카테고리의 다른 글
[정렬] 두 배열의 원소 교체 + 입력받은 개수만큼 1차원 배열로, 리스트 원소값 서로 바꾸기, 리스트 원소의 합 (1) | 2024.03.19 |
---|---|
[DFS & BFS] 프로그래머스_게임 맵 최단거리 & 나동빈_미로탈출 (1) | 2024.03.13 |
[DFS & BFS] 음료수 얼려먹기 + 2차원 리스트 생성 및 입력 방법 (0) | 2024.03.11 |
[구현] 프로그래머스_키패드 누르기 (0) | 2024.03.08 |
[그리디] 곱하기 혹은 더하기 + str(), int() (0) | 2024.03.07 |