-
8.11.금요일TIL( Today I Learned) 2023. 8. 11. 21:53
오늘 일도 많고, 덩달아 머리도 아파서, 얼마 못했다. 심한 반성.
어제 것 다시 확실히, 다른 답도 조사
1.세 개의 구분자
문제 설명
임의의 문자열이 주어졌을 때 문자 "a", "b", "c"를 구분자로 사용해 문자열을 나누고자 합니다.
예를 들어 주어진 문자열이 "baconlettucetomato"라면 나눠진 문자열 목록은 ["onlettu", "etom", "to"] 가 됩니다.
문자열 myStr이 주어졌을 때 위 예시와 같이 "a", "b", "c"를 사용해 나눠진 문자열을 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
단, 두 구분자 사이에 다른 문자가 없을 경우에는 아무것도 저장하지 않으며, return할 배열이 빈 배열이라면 ["EMPTY"]를 return 합니다.
제한사항
- 1 ≤ myStr의 길이 ≤ 1,000,000
입출력 예
myStr result "baconlettucetomato" ["onlettu", "etom", "to"] "abcd" ["d"] "cabab" ["EMPTY"] 입출력 예 설명
입출력 예 #1
- 문제 설명의 예시와 같습니다.
입출력 예 #2
- "c" 이전에는 "a", "b", "c" 이외의 문자가 없습니다.
- "c" 이후에 문자열 "d"가 있으므로 "d"를 저장합니다.
- 따라서 ["d"]를 return 합니다.
입출력 예 #3
- "a", "b", "c" 이외의 문자가 존재하지 않습니다. 따라서 저장할 문자열이 없습니다.
- 따라서 ["EMPTY"]를 return 합니다.
연습
ls =[]
ms =''
for i in "kbeauti":
if i not in ["a", "b", "c"]:
ms += i
else:
if ms:
ls.append(ms)
ms =''
if ms:
ls.append(ms)
print(ls)
이전거
내가 아마 쳇것을 거의 배꼇나보다
def solution(myStr):
# Initialize variables
result = []
current_str = ""
delimiters = {"a", "b", "c"}
# Loop through each character in the input string
for char in myStr:
if char in delimiters:
if current_str:
result.append(current_str)
current_str = ""
else:
current_str += char
# Append the last substring (if any)
if current_str:
result.append(current_str)
# Check if the result list is empty and return ["EMPTY"] in that case
if not result:
result = ["EMPTY"]
return result
새로 한거
def solution(myStr):
ls =[]
ms =''
for i in myStr:
if i not in ['a','b','c']:
ms += i
else:
if ms:
ls.append(ms)
ms = ''
if ms:
ls.append(ms)
else: —> if not ls:
if ms=="" and ls==[]: —> 이것 하나로 된다
ls = ["EMPTY"] ls = ["EMPTY"]
return ls return ls
###### 깔끔한답
def solution(myStr):
answer = [x for x in myStr.replace('a', ' ').replace('b', ' ').replace('c', ' ').split() if x]
return answer if answer else ['EMPTY']
와우 — 깔끔하고 아름답다
주어진 문자열 myStr에서 문자 'a', 'b', 'c'를 빈 칸으로 대체하고 나서 빈 칸을 기준으로 문자열을 분할한 후, 비어있지 않은 문자열들을 추출하여 반환하는 함수입니다.
- myStr.replace('a', ' ').replace('b', ' ').replace('c', ' '): 문자열 myStr에서 'a', 'b', 'c'를 빈 칸으로 대체합니다.
- .split(): 빈 칸을 기준으로 문자열을 분할하여 리스트로 만듭니다.
- [x for x in ... if x]: 리스트 컴프리헨션을 사용하여 리스트에서 각 항목을 순회하면서 빈 문자열이 아닌 항목들만 추출합니다.
- return answer if answer else ['EMPTY']: 추출한 항목들을 반환하는데, 만약 추출한 항목이 비어있으면 ['EMPTY']를 반환합니다.
즉, 주어진 문자열에서 'a', 'b', 'c'를 빈 칸으로 대체하고 나서 빈 칸을 기준으로 문자열을 분할하고, 그 중에서 비어있지 않은 문자열들만 추출하여 반환하는 함수입니다.
- 2. 이진수 더하기
문제 설명
이진수를 의미하는 두 개의 문자열 bin1과 bin2가 매개변수로 주어질 때, 두 이진수의 합을 return하도록 solution 함수를 완성해주세요.
제한사항
- return 값은 이진수를 의미하는 문자열입니다.
- 1 ≤ bin1, bin2의 길이 ≤ 10
- bin1과 bin2는 0과 1로만 이루어져 있습니다.
- bin1과 bin2는 "0"을 제외하고 0으로 시작하지 않습니다.
입출력 예
bin1 bin2 result "10" "11" "101" "1001" "1111" "11000" 입출력 예 설명
입출력 예 #1
•10 + 11 = 101 이므로 "101" 을 return합니다.
입출력 예 #2
.1001 + 1111 = 11000 이므로 "11000"을 return합니다.
이전 답 ;; 몰라서 그냥 카피하고 이해만 했나보다. 도통 ???
def solution(bin1, bin2):
result = ""
i, j = len(bin1) - 1, len(bin2) - 1
carry = 0
while i >= 0 or j >= 0:
digit1 = int(bin1[i]) if i >= 0 else 0
digit2 = int(bin2[j]) if j >= 0 else 0
# Add the digits along with the carry
total_sum = digit1 + digit2 + carry
# Append the sum modulo 2 to the result
result += str(total_sum % 2)
# Update the carry for the next iteration
carry = total_sum // 2
i -= 1
j -= 1
# If there is any remaining carry, append it to the result
if carry:
result += str(carry)
# Reverse the result and return it
return result[::-1]쳇 거
def add_binary(bin1, bin2):
# 자리수를 맞추기 위해 0을 채워넣습니다.
bin1 = bin1.zfill(len(bin2))
bin2 = bin2.zfill(len(bin1))
# 더한 결과를 저장할 리스트를 생성합니다.
result = []
# 이진수를 더합니다.
carry = 0
for i in range(len(bin1)-1, -1, -1):
bit_sum = int(bin1[i]) + int(bin2[i]) + carry
if bit_sum >= 2:
carry = 1
bit_sum -= 2
else:
carry = 0
result.append(str(bit_sum))
# 마지막 자리수에서 올림이 발생한 경우 처리합니다.
if carry == 1:
result.append('1')
# 결과를 뒤집어서 반환합니다.
return ''.join(result[::-1])
내가 공부한 내용과 내가 만든거
십진수를 2진수로 만드는 함수
def decimal_to_binary(decimal_num):
binary_num = ""
while decimal_num > 0:
remainder = decimal_num % 2
binary_num = str(remainder) + binary_num
decimal_num //= 2 # 10진수를 2로 나눈 몫을 구합니다.
return binary_num if binary_num else "0"
####이진수를 10진수로 바꾸는 법
def solution_b2t(bin_number):
tin_st =[]
for i,v in enumerate(bin_number):
print(i,v)
tin_st +=[int( v)*(2**(len(bin_number)-(1+i)))]
return (sum(tin_st))
#### 두 수를 계산하는 법
def solution(bin1,bin2):
an1=[]
for i in (bin1,bin2):
an1 += solution_b2t(i)
result = sum(an1)
print(solution_b2t(n))
가장 간단한 방법
def solution(bin1, bin2):
answer = bin(int(bin1,2) + int(bin2,2))[2:]
return answer
'TIL( Today I Learned)' 카테고리의 다른 글
8.13.일요일 (0) 2023.08.13 8.12.토요일 잭팟스터디, 문제 풀이 & 미니강의 (1) 2023.08.12 8.10.목요일 코딧 강의 & 프로그래머스 문제 복습 (1) 2023.08.10 8.9.수요일 / 아침에 일어나서 도서관 간 날 // 7시 10분 부터 공부 시작 (1) 2023.08.10 8.8.화요일 (0) 2023.08.08