Algorithm/programmer/level 1/210613/10題(Python使用)
37771 ワード
2021年6月13日
これはプログラマーが解いたレベル1 10題の集合です.
コードには問題解決の説明が注記されています.
📖 質問1:ダーツゲーム
パスワード
def solution(dartResult):
answer = 0
# 'S', 'D', 'T'에 대한 제곱수를 미리 사전 자료형에 담아두었다.
sdt = {
'S' : 1,
'D' : 2,
'T' : 3
}
tmp = list()
# iterator
i = 0
while i < len(dartResult):
# 현재 문자가 정수형이라면
if dartResult[i].isdecimal():
# 그런데 한 문자는 한 개의 숫자로 이루어져있어서 10을 처리할 수 없기 때문에 따로 처리
if dartResult[i] == '1' and dartResult[i+1] == '0':
tmp.append(10)
i += 1
else:
# 한자릿수의 숫자는 바로 리스트tmp에 넣는다.
tmp.append(int(dartResult[i]))
# 현재 문자가 알파벳이라면(S,D,T)
elif dartResult[i].isalpha():
tmp[-1] **= sdt[dartResult[i]]
else:
# 현재 문자가 '*'이라면
if dartResult[i] == '*':
if len(tmp) > 1:
tmp[-1] *= 2
tmp[-2] *= 2
# 첫 번째 기회에서 스타상이라면
else:
tmp[-1] *= 2
# 현재 문자가 '#'이라면
elif dartResult[i] == '#':
tmp[-1] *= (-1)
i += 1
# 현재까지 구한 점수 더하기
for i in tmp:
answer += i
return answer
΄コード->他の人のコード
def solution(dartResult):
answer = 0
# 'S', 'D', 'T'에 대한 제곱수를 미리 사전 자료형에 담아두었다.
sdt = {
'S' : 1,
'D' : 2,
'T' : 3
}
tmp = list()
# iterator
i = 0
while i < len(dartResult):
# 현재 문자가 정수형이라면
if dartResult[i].isdecimal():
# 그런데 한 문자는 한 개의 숫자로 이루어져있어서 10을 처리할 수 없기 때문에 따로 처리
if dartResult[i] == '1' and dartResult[i+1] == '0':
tmp.append(10)
i += 1
else:
# 한자릿수의 숫자는 바로 리스트tmp에 넣는다.
tmp.append(int(dartResult[i]))
# 현재 문자가 알파벳이라면(S,D,T)
elif dartResult[i].isalpha():
tmp[-1] **= sdt[dartResult[i]]
else:
# 현재 문자가 '*'이라면
if dartResult[i] == '*':
if len(tmp) > 1:
tmp[-1] *= 2
tmp[-2] *= 2
# 첫 번째 기회에서 스타상이라면
else:
tmp[-1] *= 2
# 현재 문자가 '#'이라면
elif dartResult[i] == '#':
tmp[-1] *= (-1)
i += 1
# 현재까지 구한 점수 더하기
for i in tmp:
answer += i
return answer
def solution(dartResult):
point = []
answer = []
# 10점을 처리하기 위해서 미리 문자열'10'을 'k'로 대체
dartResult = dartResult.replace('10','k')
point = ['10' if i == 'k' else i for i in dartResult]
print(point)
i = -1
sdt = ['S', 'D', 'T']
for j in point:
if j in sdt :
answer[i] = answer[i] ** (sdt.index(j)+1)
elif j == '*':
answer[i] = answer[i] * 2
if i != 0 :
answer[i - 1] = answer[i - 1] * 2
elif j == '#':
answer[i] = answer[i] * (-1)
else:
answer.append(int(j))
i += 1
return sum(answer)
💡 認識文法
変更後、値はすぐに変更されますが、文が返されると、反復器は元の値を返します.
# 0 1 2 4가 아닌,
# 결과 : 0 1 2 3 4
for i in range(5):
print(i, end = ' ')
if i == 2:
i += 1
📖 問題2:別々の数字配列
パスワード
def solution(arr, divisor):
answer = []
arr.sort()
for a in arr:
if a % divisor == 0:
answer.append(a)
if not answer:
answer.append(-1)
return answer
΄コード2->より簡潔なコード
def solution(arr, divisor):
answer = []
arr.sort()
# 리스트 컴프리헨션 사용
answer = [x for x in arr if x % divisor == 0]
return answer if answer else [-1]
📖 質問3:2つの整数の間の和
パスワード
def solution(a, b):
answer=0
a,b=min(a,b),max(a,b)
for i in range(a,b+1):
answer+=i
return answer
΄コード->他の人のコード
def solution(arr, divisor):
answer = []
arr.sort()
for a in arr:
if a % divisor == 0:
answer.append(a)
if not answer:
answer.append(-1)
return answer
def solution(arr, divisor):
answer = []
arr.sort()
# 리스트 컴프리헨션 사용
answer = [x for x in arr if x % divisor == 0]
return answer if answer else [-1]
パスワード
def solution(a, b):
answer=0
a,b=min(a,b),max(a,b)
for i in range(a,b+1):
answer+=i
return answer
΄コード->他の人のコード
def solution(a, b):
answer = 0
if a>b : a,b = b,a
return sum(range(a,b+1))
range(n)
📖 質問4:文字列内で任意にソート
パスワード
def solution(strings, n):
# 람다 함수를 사용해서, 첫번째 기준: 인덱스 n에 있는 문자, 두번째 기준: 사전에서 앞에 나온 것 순으로
return sorted(strings, key=lambda x: (x[n], x))
def solution(strings, n):
# 람다 함수를 사용해서, 첫번째 기준: 인덱스 n에 있는 문자, 두번째 기준: 사전에서 앞에 나온 것 순으로
return sorted(strings, key=lambda x: (x[n], x))
📖 質問5:文字列のpとyの個数
パスワード
def solution(s):
answer = True
if s. count('p')+s.count('P' ) != s. count('y')+s.count('Y') :
answer =False
return answer
->lower()を使用してすべてのアルファベットを作成した後
s.count('p') != s.count("y")を作る方法もあります!
📖 質問6:文字列降順で並べ替え
パスワード
def solution(s):
answer = True
if s. count('p')+s.count('P' ) != s. count('y')+s.count('Y') :
answer =False
return answer
パスワード
def solution(s):
answer = ''
# 대문자를 담는 리스트
upper = []
# 소문자를 담는 리스트
lower = []
# 문자열에는 sort()가 없어서 일부로 list로 만들었지만,
# sorted()를 사용해서 정렬할 수 있으니 굳이 list로 만들 필요가 없었다.
s = list(s)
for i in s:
if i.isupper():
upper.append(i)
else:
lower.append(i)
upper.sort(reverse=True)
lower.sort(reverse=True)
answer = ''.join(lower)+''.join(upper)
return answer
💡 文字列のソート
文字列をソートする場合は、ソート()関数を使用します.
逆にsorded()関数はlistを返しますので、文字列に戻すにはjoin()関数と一緒に使用する必要があります.
文字列を並べるときは、大文字が先、小文字が後に着きます!
📖 質問7:文字列の基本
パスワード
def solution(s):
return True if (len(s) == 4 or len(s) == 6) and s.isdigit() else False
΄コード->他の人のコード
チェック
def solution(s):
return True if (len(s) == 4 or len(s) == 6) and s.isdigit() else False
def solution(s):
return if s.isdigit() and len(s) in (4,6)
📖 質問8:ソウルで金相公を探す
パスワード
def solution(seoul):
return "김서방은 {}에 있다".format(seoul.index("Kim"))
エレメントの場所の検索
1.文字列->find()、rfind()
def solution(seoul):
return "김서방은 {}에 있다".format(seoul.index("Kim"))
-1
を返します. print("장발장은 거꾸로 해도 장발장".find("장발장")) # 0
print("장발장은 거꾸로 해도 장발장".rfind("장발장")) # 12
2.リスト->インデックス()
ValueError
が生成されます.a = list("장발장은 거꾸로 해도 장발장")
print(a.index("장")) # 0
📖 質問9:小数点を検索
パスワード
def solution(n):
answer = 0
# 에라토스테네스의 체를 위한 표
# index에 해당하는 수가 소수이면 True, 아니면 False
isPrime = [True] * (n+1)
for i in range(2, n//2+1):
# 소수의 배수들은 모두 소수가 아니다.
if isPrime[i]:
j = 2
while i * j <= (n):
isPrime[i*j] = False
j += 1
# 소수의 개수 세기
for i in range(2, n+1):
if isPrime[i]:
answer += 1
return answer
΄コード->他の人のコード
def solution(n):
answer = 0
# 에라토스테네스의 체를 위한 표
# index에 해당하는 수가 소수이면 True, 아니면 False
isPrime = [True] * (n+1)
for i in range(2, n//2+1):
# 소수의 배수들은 모두 소수가 아니다.
if isPrime[i]:
j = 2
while i * j <= (n):
isPrime[i*j] = False
j += 1
# 소수의 개수 세기
for i in range(2, n+1):
if isPrime[i]:
answer += 1
return answer
def solution(n):
# 2 ~ n의 수를 담은 집합 생성 -> 나중에는 소수의 집합이 된다.
num = set(range(2, n+1))
for i in range(2, n+1):
# i가 소수라면
if i in num:
# n이하의 i의 배수를 num에서 삭제한다.
num -= set(range(i*2, n+1, i))
return len(num)
rangeを使用してn未満のiの倍数リストを作成する
i, n = 5, 100
a = list(range(i, n+1, i))
print(a) # [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]
📖 第十題:スイカスイカスイカスイカスイカスイカスイカスイカ水?
パスワード
def solution(n):
return "수박"*(n//2) if n % 2 == 0 else "수박"*(n//2) + "수"
΄コード->他の人のコード(もっと簡潔!!!!)
def solution(n):
return "수박"*(n//2) + "수"*(n%2)
1行のコードに欲があるので、1行のコードもたくさん書きました.
1行のコードよりも親切なコードで書くべきです...
Reference
この問題について(Algorithm/programmer/level 1/210613/10題(Python使用)), 我々は、より多くの情報をここで見つけました
https://velog.io/@yellowsummer/Algorithmprogrammerslevel121061310문제
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
def solution(n):
return "수박"*(n//2) if n % 2 == 0 else "수박"*(n//2) + "수"
def solution(n):
return "수박"*(n//2) + "수"*(n%2)
Reference
この問題について(Algorithm/programmer/level 1/210613/10題(Python使用)), 我々は、より多くの情報をここで見つけました https://velog.io/@yellowsummer/Algorithmprogrammerslevel121061310문제テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol