# 함수는 위에다가 만들어서 사용해야 한다.
# mm:ss 문자열을 -> 초로 변환하는 기능
def time_to_seconds(time_str):
minutes, seconds = map(int, time_str.split(':'))
return minutes * 60 + seconds
# mm의 *60 + ss =
#map()함수, split()함수
# 초를 인자로 전달하면 -> mm:ss 문자열로 변환 하는 기능
def seconds_to_time(seconds):
minutes = seconds // 60
seconds = seconds % 60
return f"{minutes:02}:{seconds:02}"
# // , % 연산
def solution(video_len, pos, op_start, op_end, commands):
# 동영상 길이와 현재 위치를 초로 변환
video_length = time_to_seconds(video_len)
current_position = time_to_seconds(pos)
opening_start = time_to_seconds(op_start)
opening_end = time_to_seconds(op_end)
# command라는 변수가 commands라는 시퀸스 동안에 실시한다.
for command in commands:
# command가 "prev" 명령어인 경우 현재 위치에서 -10s 가 현재 위치로 할당
if command == "prev":
current_position = max(0, current_position - 10)
# command가 "next"명령어인 경우 현재 위치에서 +10s 가 현재 위치로 할당
elif command == "next":
current_position = min(video_length, current_position + 10)
# command가 "skip"명령어인 경우
# 현재 재생 위치가 오프닝 구간인 경우 현재 재생위치가 엔딩 구간을 할당받는다.
elif command == "skip":
if opening_start <= current_position <= opening_end:
current_position = opening_end
# 최종 위치를 "mm:ss" 형식으로 변환하여 반환
return seconds_to_time(current_position)
<--- 이건 틀린것...
오프닝 구간인지 확인하는 과정이
현재 시간을 명령어 전에 한번 확인하고
명령어 이후에도 현재 위치에 따라서 이동이 되기 때문에
next 명령과 prev명령 위 아래에 위치시켜야한다. <- 중요 포인트
정확한 코드는 아래와 같다.
def time_to_seconds(time_str):
""" mm:ss 형식의 시간을 초로 변환 """
minutes, seconds = map(int, time_str.split(':'))
return minutes * 60 + seconds
def seconds_to_time(seconds):
""" 초를 mm:ss 형식으로 변환 """
minutes = seconds // 60
seconds = seconds % 60
return f"{minutes:02}:{seconds:02}"
def solution(video_len, pos, op_start, op_end, commands):
# 동영상 길이와 현재 위치를 초로 변환
video_length = time_to_seconds(video_len)
current_position = time_to_seconds(pos)
opening_start = time_to_seconds(op_start)
opening_end = time_to_seconds(op_end)
for command in commands:
# 오프닝 구간인지 확인하고 이동
if opening_start <= current_position <= opening_end:
current_position = opening_end # 오프닝 끝으로 이동
# 현재 위치가 오프닝 구간이 아닌 경우에만 명령어 실행
if command == "prev":
current_position = max(0, current_position - 10) # 10초 전으로 이동, 최소 0초
elif command == "next":
current_position = min(video_length, current_position + 10) # 10초 후로 이동, 최대 동영상 길이
# 오프닝 구간인지 다시 확인하고 이동
if opening_start <= current_position <= opening_end:
current_position = opening_end # 오프닝 끝으로 이동
# 최종 위치를 "mm:ss" 형식으로 변환하여 반환
return seconds_to_time(current_position)
<동영상 재생기 알고리즘을 파이썬으로 풀어나가기 위해서 알아야 할 메소드 목록>
iterable 은 파이썬에서 반복 가능한 객체를 의미
예를 들어서 반복문을 사용하여 객체 요소를 하나씩 순환 가능한
리스트, 튜플,문자열,딕셔너리,집합 등이 이에 해당합니다.
추가로 알아야 할 단어로는 iterator도 있습니다.
반복 가능한 객체에서 각각의 하나씩의 요소를 지닌 상태를 의미합니다.
보통 iterable 객체에서 iter() 함수를 호출하여 생성된 객체이며,
iterator은 _next_() 메서드를 사용하여
한 번에 하나의 요소를 반환 할 수 있다고 합니다.
# iterable과 iterator의 예
my_list = [1, 2, 3]
my_iterator = iter(my_list) # iterable에서 iterator 생성
print(next(my_iterator)) # 1
print(next(my_iterator)) # 2
print(next(my_iterator)) # 3
# print(next(my_iterator)) # StopIteration 오류 발생 <- 더 이상 나올 요소 존재 X
1. map()함수
: map() 함수는 주어진 함수를 iterable의 모든 요소에 적용하여 새로운 iterable을 반환한다.
반환되는 값은 map객체로, 리스트로 변환 가능하다.
사용예시
# 1. 기본 사용법
def square(x):
return x ** 2
numbers = [1, 2, 3, 4]
squared_numbers = map(square, numbers)
print(list(squared_numbers)) # 출력: [1, 4, 9, 16]
# 2. 람다 함수와 함께 사용
numbers = [1, 2, 3, 4]
squared_numbers = map(lambda x: x ** 2, numbers)
print(list(squared_numbers)) # 출력: [1, 4, 9, 16]
# 3. 여러 iterable을 동시에 다루기
a = [1, 2, 3]
b = [4, 5, 6]
summed = map(lambda x, y: x + y, a, b)
print(list(summed)) # 출력: [5, 7, 9]
2. split()함수
: split() 함수는 문자열을 지정한 구분자로 나누어 리스트로 반환한다.
기본값으로는 ''공백을 구분자로 사용한다.
사용예시
# 1. 기본 사용법
text = "안녕하세요 여러분"
words = text.split() # 기본적으로 공백을 기준으로 나눕니다.
print(words) # 출력: ['안녕하세요', '여러분']
# 2. 특정 구분자 나누기
csv_line = "apple,banana,cherry"
fruits = csv_line.split(",") # 쉼표를 기준으로 나눕니다.
print(fruits) # 출력: ['apple', 'banana', 'cherry']
# 3. 제한된 개수로 나누기
text = "one two three four"
limited_split = text.split(" ", 2) # 두 번만 나눕니다.
print(limited_split) # 출력: ['one', 'two', 'three four']
+Split()함수와 map()함수 함께 사용하는 예시+
# 문자열을 정수로 변환하기
numbers_str = "1 2 3 4 5"
numbers = map(int, numbers_str.split()) # 문자열을 나누고 각 요소를 정수로 변환
print(list(numbers)) # 출력: [1, 2, 3, 4, 5]
3. 파이썬에서 사용하는 연산자 목록
: 코드에서 사용한 '//' 연산자는 a // b = a / b 와 같고, 소숫점을 버리고 정수 몫만을 가진다.
4. max()함수
: 주어진 인자 중에서 최소값을 반환하는 함수
5. min()함수
: 주어진 인자 중에서 최대값을 반환하는 함수
min() 함수와 max() 함수는 다양한 데이터 타입에서 최소값과 최대값을 쉽게 찾을 수 있도록 도와준다.
*참고로 위의 알고리즘 문제에서 max(0, 현재영상위치 -10) 과 같이 설정했을 때는
현재영상위치가 07초이면 -3이니깐 가장 큰 값이 0이다.
즉, 영상에서 음수는 없으니깐, 0으로 할당해주기 위해서 값의 범위를 지정한 것.
< 동영상 재생기 알고리즘을 파이썬으로 풀어나가기 위해서 알아야 할 파이썬 문법>
1. if - elif
** Python**
if condition1:
# 실행할 코드
elif condition2:
# 실행할 코드
else:
# 실행할 코드
대뜸 Delphi 튀어나오고, 아무래도 파이썬에서 쓰는 elif는 'else if'의 축약어인 것 같다.
그럼 다른 언어들은 조건문을 어떤 형태로 쓰는지 잠시 정리해봐야겠다.
** Delphi**
if <조건> then
being
<참일 때 실행코드> ;
end else
being
<거짓일 때 실행코드>
end;
** C/C++ , JAVA, JAVAScript **
if (condition1) {
// 실행할 코드
} else if (condition2) {
// 실행할 코드
} else {
// 실행할 코드
}
** PHP**
if ($condition1) {
// 실행할 코드
} elseif ($condition2) {
// 실행할 코드
} else {
// 실행할 코드
}
** Ruby**
if condition1
# 실행할 코드
elsif condition2
# 실행할 코드
else
# 실행할 코드
end
99클럽 코테 스터디 4일차 TIL + 오늘의 학습 키워드 : 문자열+해시 (2) | 2024.10.31 |
---|---|
제목: 99클럽 코테 스터디 3일차 TIL + 오늘의 학습 키워드 : 문자열 (4) | 2024.10.30 |
99클럽 코테 스터디 2일차 TIL + 오늘의 학습 키워드 : 문자열 (0) | 2024.10.29 |
99클럽 코테 스터디 1일차 TIL + 오늘의 학습 키워드 : 문자열(4기|파이썬|비기너) (7) | 2024.10.28 |
[항해99]코테클럽4기 - 파이썬|비기너 신청완료 (3) | 2024.10.22 |