[코딩테스트 입문] 7의 개수, OX 퀴즈…
7의 개수
문제 설명
머쓱이는 행운의 숫자 7을 가장 좋아합니다. 정수 배열 array
가 매개변수로 주어질 때, 7이 총 몇개 있는지 return 하도록 solution 함수를 완성해보세요.
제한 사항 1 ≤ array의 길이 ≤ 100 0 ≤ array의 원소 ≤ 100,000
입출력 예
array | result |
---|---|
[7, 77, 17] | 4 |
[10, 29] | 0 |
입출력 예 설명
입출력 예 #1
- [7, 77, 17]에는 7이 4개 있으므로 4를 return 합니다.
입출력 예 #2
- [10, 29]에는 7이 없으므로 0을 return 합니다.
문제 풀이
def solution(array):
array = list(map(str, array))
return ''.join(array).count("7")
' '.join([str])
join은 리스트를 문자열로 바꿔줍니다. 여기서 주의해야할 점은 숫자 리스트말고 문자열 리스트여야 한다는 점입니다.
다른 사람의 풀이
def solution(array):
return str(array).count('7')
map을 통해서 바꾸는 것 말고 리스트를 str하면 전체 문자열이 된다는 것을 알 수 있습니다.
OX퀴즈
문제 설명
덧셈, 뺄셈 수식들이 ‘X [연산자] Y = Z’ 형태로 들어있는 문자열 배열 quiz
가 매개변수로 주어집니다. 수식이 옳다면 “O”를 틀리다면 “X”를 순서대로 담은 배열을 return하도록 solution 함수를 완성해주세요.
제한 사항
- 연산 기호와 숫자 사이는 항상 하나의 공백이 존재합니다. 단 음수를 표시하는 마이너스 기호와 숫자 사이에는 공백이 존재하지 않습니다.
- 1 ≤
quiz
의 길이 ≤ 10 - X, Y, Z는 각각 0부터 9까지 숫자로 이루어진 정수를 의미하며, 각 숫자의 맨 앞에 마이너스 기호가 하나 있을 수 있고 이는 음수를 의미합니다.
- X, Y, Z는 0을 제외하고는 0으로 시작하지 않습니다.
- -10,000 ≤ X, Y ≤ 10,000
- -20,000 ≤ Z ≤ 20,000
- [연산자]는 + 와 - 중 하나입니다.
입출력 예
quiz | result |
---|---|
[“3 - 4 = -3”, “5 + 6 = 11”] | [“X”, “O”] |
[“19 - 6 = 13”, “5 + 66 = 71”, “5 - 15 = 63”, “3 - 1 = 2”] | [“O”, “O”, “X”, “O”] |
입출력 예 설명
- 입출력 예 #1
- 3 - 4 = -3 은 틀린 수식이므로 “X”, 5 + 6 = 11 은 옳은 수식이므로 “O” 입니다. 따라서 [“X”, “O”]를 return합니다.
- 입출력 예 #2
- 19 - 6 = 13 은 옳은 수식이므로 “O”, 5 + 66 = 71 은 옳은 수식이므로 “O”, 5 - 15 = 63 은 틀린 수식이므로 “X”, 3 - 1 = 2는 옳은 수식이므로 “O” 따라서 [“O”, “O”, “X”, “O”]를 return합니다.
문제 풀이
def solution(quiz):
answer=[]
for i in quiz:
a = i.split("=")
if eval(a[0]) == int(a[1]):
answer.append("O")
else:
answer.append("X")
return answer
우선 리스트 quiz
를 "="
를 기준으로 나눠서 새로운 리스트를 생성해줍니다.
새로운 리스트의 0번째에는 연산식이 들어있고 1번째에는 값이 들어있습니다.
eval를 통해서 계산한 값이 1번에 들어있는 값과 같다면 O
아니라면 X
를 담습니다.
다른 사람의 풀이
def valid(equation):
equation = equation.replace('=', '==')
return eval(equation)
def solution(equations):
return ["O" if valid(equation) else "X" for equation in equations]
-
valid
파이썬에서
valid
는 특정 값이나 조건이 유효한지, 즉 규칙에 맞거나 오류가 없는지를 확인하는 의미로 사용됩니다.보통 데이터를 검사할 때 사용됩니다.
사용자 입력이 유효한지, 변수 값이 적절한지, 혹은 함수의 인자가 예상대로 동작하는지 등을 확인 할 때,
valid
라는 용어를 사용합니다.
solution에서 valid라는 함수를 만들어 해당 문자열이 유효한지에 대해 판단합니다.
A로 B 만들기
문제 설명
문자열 before
와 after
가 매개변수로 주어질 때, before
의 순서를 바꾸어 after
를 만들 수 있으면 1을, 만들 수 없으면 0을 return 하도록 solution 함수를 완성해보세요.
제한 사항
- 0 <
before
의 길이 ==after
의 길이 < 1,000 before
와after
는 모두 소문자로 이루어져 있습니다.
입출력 예
before | after | result |
---|---|---|
“olleh” | “hello” | 1 |
“allpe” | “apple” | 0 |
입출력 예 설명
- 입출력 예 #1
- “olleh”의 순서를 바꾸면 “hello”를 만들 수 있습니다.
- 입출력 예 #2
- “allpe”의 순서를 바꿔도 “apple”을 만들 수 없습니다.
문제 풀이
def solution(before, after):
a = set(before)
for i in a:
if before.count(i) != after.count(i):
return 0
return 1
다른 사람의 풀이
def solution(before, after):
before=sorted(before)
after=sorted(after)
if before==after:
return 1
else:
return 0
----
def solution(before, after):
return 1 if sorted(before)==sorted(after) else 0
이진수 더하기
문제 설명
이진수를 의미하는 두 개의 문자열 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 binary(bin):
num = 0
for i, v in enumerate(bin):
if v == "1":
num += 2 ** (len(bin) - i -1)
return num
def solution(bin1, bin2):
answer = ""
bin3 = binary(bin1) + binary(bin2)
while bin3 >= 2 :
if bin3 % 2 == 0:
bin3 = bin3 // 2
answer += "0"
else:
bin3= bin3 // 2
answer += "1"
answer += "1"
return answer[::-1]
-
^
은 제곱식이 아니다.제곱을 할 때 일반적인 표현으로
^
을 많이 사용합니다. 그러나 제곱을 할때^
이 아닌**
이나pow(n,m)
을 사용합니다.^
는 비트 연산자 XOR입니다.이 연산자는 두 숫자 간의 비트 담위 비교에서 서로 다른 비트는 1, 동일한 비트는 0으로 계산합니다.
5번 테스트 케이스에서 에러가 났습니다.
이유는 둘다 “0”, “0”인 경우도 고려해야하기 때문입니다.
if bin1 == "0" and bin2 == "0":
return "0"
를 추가해줬습니다.
다른 사람의 풀이
def solution(bin1, bin2):
answer = bin(int(bin1,2) + int(bin2,2))[2:]
return answer
bin()
10진수 숫자를 이진수 문자열로 반환하는 메소드입니다.
int(2진수문자열, 2)
2진수 문자열을 10진수 정수로 변환하는 코드입니다.
` answer = bin(int(bin1,2) + int(bin2,2))[2:]`
여기서 [2:]
가 붙은 이유는 bin()함수는 10진수 정수를 2진수 문자열로 변환하는데 이때 항상 0b
로 시작하는 2진수 문자열을 반환합니다.
이때, 0b
는 2진수 숫자를 나타내는 접두사입니다.
파이썬에서 2진수 리터럴을 표현할 때, 앞에 0b
를 붙여서 2진수라는 것을 명시합니다.
잘라서 배열로 저장하기
문제 설명
문자열 my_str
과 n
이 매개변수로 주어질 때, my_str
을 길이 n
씩 잘라서 저장한 배열을 return하도록 solution 함수를 완성해주세요.
제한 사항
- 1 ≤
my_str
의 길이 ≤ 100 - 1 ≤
n
≤my_str
의 길이 my_str
은 알파벳 소문자, 대문자, 숫자로 이루어져 있습니다.
입출력 예
my_str | n | result |
---|---|---|
“abc1Addfggg4556b” | 6 | [“abc1Ad”, “dfggg4”, “556b”] |
“abcdef123” | 3 | [“abc”, “def”, “123”] |
입출력 예 설명
입출력 예 #1
- “abc1Addfggg4556b” 를 길이 6씩 잘라 배열에 저장한 [“abc1Ad”, “dfggg4”, “556b”]를 return해야 합니다.
입출력 예 #2
- “abcdef123” 를 길이 3씩 잘라 배열에 저장한 [“abc”, “def”, “123”]를 return해야 합니다.
유의사항
- 입출력 예 #1의 경우 “abc1Addfggg4556b”를 길이 6씩 자르면 “abc1Ad”, “dfggg4” 두개와 마지막 “556b”가 남습니다. 이런 경우 남은 문자열을 그대로 배열에 저장합니다.
문제 풀이
def solution(my_str, n):
l = len(my_str)
a = l//n
b = l%n
if b != 0:
a+=1
answer = []
for i in range(a):
if (i*n)+n > len(my_str):
answer.append(my_str[i*n:])
else:
answer.append(my_str[i*n:(i*n)+n])
return answer
다른 사람의 풀이
def solution(my_str, n):
return [my_str[i: i + n] for i in range(0, len(my_str), n)]
range에 시작과 끝 그리고 숫자를 넣으면 그 해당 숫자만큼 넘어간다는것을 잊고 있었습니다..
그래도 다시 상기할 수 있어 다행입니다.
댓글남기기