- 평균 구하기
def solution(arr):
return sum(arr) / len(arr)
- 약수의 합
n이 0일 때와 1일 때 예외 처리를 해주어야 한다.
def solution(n):
if n == 0:
return 0
elif n == 1:
return 1
answer = 1 + n
for x in range(2, n):
if n % x == 0:
answer += x
return answer
- x만큼 간격이 있는 n개의 숫자
def solution(x, n):
answer = []
if x == 0:
answer = [0]*n
else:
answer = [x for x in range(x, x*(n+1), x)]
return answer
- 자릿수 더하기
def solution(n):
answer = 0
while n > 0:
answer += n % 10
n = n // 10
return answer
- 짝수와 홀수
def solution(num):
if num % 2 == 0:
return "Even"
else:
return "Odd"
- 나머지가 1이 되는 수 찾기
def solution(n):
answer = 0
for i in range(2, n):
if n % i == 1:
answer = i
break
return answer
- 자연수 뒤집어 배열로 만들기
def solution(n):
answer = str(n)
answer = answer[::-1]
return [int(x) for x in answer]
- 문자열을 정수로 바꾸기
이번에는 너무나 쉬운 문제였다...
그나저나 int()함수가 -까지 파씽하는줄은 몰랐다.
def solution(s):
return int(s)
- 문자열 내 p와 y의 개수
def solution(s):
return s.upper().count('P') == s.upper().count('Y')
- 정수 제곱근 판별
math.sqrt를 사용하여 판단한다.
def solution(n):
import math
sqareRoot = int(math.sqrt(n))
if sqareRoot**2 == n:
return (sqareRoot+1)**2
else:
return -1
- 정수 내림차순으로 배치하기
def solution(n):
answer = list(str(n))
answer = sorted(answer, reverse=True)
answer = ''.join(answer)
return int(answer)
- 하샤드 수
def solution(x):
divider = 0
for i in str(x):
divider += int(i)
return x % divider == 0
- 두 정수 사이의 합
역시 다른 사람의 풀이를 보면 더 짧은 코드로 간결하게 짤 수 있다는 것을 알 수 있다. 원래 6줄이던 코드를 3줄이나 줄였다.
def solution(a, b):
a, b = min(a, b), max(a, b)
return sum(range(a, b+1))
- 콜라츠 추측
def solution(num):
if num == 1:
return 0
count = 0
while count < 500:
if num % 2 == 0:
num /= 2
else:
num = num*3 + 1
count += 1
if num == 1:
break
if count >= 500:
return -1
return count
- 서울에서 김서방 찾기
그저 순회해서 찾기만 하면 되는문제..
def solution(seoul):
for i in range(len(seoul)):
if seoul[i] == 'Kim':
return '김서방은 {}에 있다'.format(i)
return 0
- 나누어 떨어지는 숫자 배열
def solution(arr, divisor):
answer = []
for x in arr:
if x % divisor == 0:
answer.append(x)
if len(answer) == 0:
answer.append(-1)
return sorted(answer)
- 음양 더하기
def solution(absolutes, signs):
answer = 0
for i in range(len(absolutes)):
if signs[i] == True:
answer += absolutes[i]
else:
answer -= absolutes[i]
return answer
print(solution([4,7,12], [True,False,True]))
- 핸드폰 번호 가리기
def solution(phone_number):
return '*' * (len(phone_number) - 4) + phone_number[-4:]
- 없는 숫자 더하기
def solution(numbers):
answer = 0
for x in range(10):
if x not in numbers:
answer += x
return answer
print(solution([1,2,3,4,6,7,8,0]))
- 제일 작은 수 제거하기
def solution(arr):
value = min(arr)
arr.remove(value)
if len(arr) == 0:
arr.append(-1)
return arr
- 가운데 글자 가져오기
def solution(s):
if len(s) % 2 == 0:
answer = s[len(s)//2 - 1:len(s)//2 + 1]
else:
answer = s[len(s)//2]
return answer
- 수박수박수박수박수박수?
def solution(n):
answer = '수박'
answer *= n//2
if n % 2 ==1:
answer += '수'
return answer
- 내적
def solution(a, b):
answer = 0
for i in range(len(a)):
answer += a[i]*b[i]
return answer
- 약수의 개수와 덧셈
효율성 테스트가 없는 쉬운 문제이다.
def solution(left, right):
answer = 0
for num in range(left, right+1):
count = 1
for i in range(1, int(num/2) + 1):
if num % i == 0:
count += 1
print(num, count)
if count % 2 == 0:
answer += num
else:
answer -= num
return answer
- 문자열 내림차순으로 배치하기
python 문자열은 .sort()메소드를 가지고 있지 않다. 그래서 sorted() 내장 함수를 이용해야 하는데, 결과가 리스트로 나온다. 이것을 다시 문자열로 만드려면 .join메소드를 사용해 문자열로 만들어 줄 수 있다.
def solution(s):
answer = "".join(sorted(s, reverse=True))
return answer
- 부족한 금액 계산하기
def solution(price, money, count):
answer = money - price*count*(count+1)//2
if answer > 0:
answer = 0
return abs(answer)
- 문자열 다루기 기본
python 에서 문자열을 잘 다루려면 기본적인regular expression을 사용할줄 알아야 한다.
'[0-9]'는 한 글자가 숫자라는 것이고, '[0-9]+'는 숫자가 1개 이상 이라는 것이다. '[0-9]'*는 숫자가 0개 이상이라는 것이다.
'[0-9a-zA-z]'는 한글자가 숫자이거나 알파벳이라는 것이다. '[^0-9]'는 한 글자가 숫자가 아니라는 것이다.
def solution(s):
import re
if len(s) == 4 or len(s) == 6:
if re.fullmatch('[0-9]+', s):
return True
else:
return False
else:
return False
- 행렬의 덧셈
def solution(arr1, arr2):
for y in range(len(arr1)):
for x in range(len(arr1[y])):
arr1[y][x] += arr2[y][x]
return arr1
- 직사각형 별찍기
a, b = map(int, input().strip().split(' '))
for y in range(b):
print('*'*a)
- 최대공약수와 최소공배수
def solution(n, m):
small = min(n, m)
big = max(n, m)
answer = []
#최대공약수
for x in range(small, 0, -1):
if small % x == 0 and big % x == 0:
answer.append(x)
break
#최소공배수
for x in range(big, small * big + 1):
if x % big == 0 and x % small == 0:
answer.append(x)
break
return answer
- 같은 숫자는 싫어
def solution(arr):
current = arr[0]
answer = [current]
for x in arr:
if current != x:
answer.append(x)
current = x
return answer
- 3진법 뒤집기
10진법을 3진법으로 나누는 방법은 나눠서 몫은 저장해두고 나머지만 더하다가 몫이 3미만이 되었을 때 마지막으로 더하고 reverse하면 된다. 그러나 문제에서는 뒤집어져있는 버전을 원하므로 뒤집지 않아도 된다.
def solution(n):
answer = 0
reversedTernaryNotation = ''
remainder = 0
while n >= 3:
remainder = n % 3
reversedTernaryNotation += str(remainder)
n = n // 3
reversedTernaryNotation += str(n)
return int(reversedTernaryNotation, 3)
print(solution(45))
뒤집으려면 어떻게 하느냐? string[::-1]을 하면 뒤집어진다. https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range 를 보면
s[i:j:k] | slice of s from i to j with step k | (3)(5) |
이라고 되어있다. string[start, end, step]인데 step을 -1로 지정하면 맨끝에서 맨앞으로 탐색하여 반환하는것이다.
- 예산
그저 정렬하고 세주기만 하면 되는 문제이다.
def solution(d, budget):
answer = 0
d.sort()
for x in d:
if budget >= x:
budget -= x
answer += 1
else:
break
return answer
- 이상한 문자 만들기
공백이 나오면 count를 0으로 초기화해 인덱스를 구현한다.
.upper()와 .lower()메소드를 사용해 대문자, 소문자로 만든다
def solution(s):
answer = ''
count = 0
for x in range(len(s)):
if s[x] == ' ':
answer += ' '
count = 0
else:
if count % 2 == 0:
answer += s[x].upper()
else:
answer += s[x].lower()
count += 1
return answer
- 최소직사각형
가로 세로중 작은 값을 가로, 큰 값을 세로로 정렬한다.
def solution(sizes):
for x in sizes:
x.sort()
print(sizes)
widths = [x[0] for x in sizes]
heights = [x[1] for x in sizes]
answer = max(widths) * max(heights)
return answer
- 시저 암호
ord()는 문자의 유니코드 정수를 반환하고, chr()는 정수를 문자로 반환한다.
65와 90사이, 97과 122사이로 대소문자를 구별하면 된다.
def solution(s, n):
answer = ''
for x in s:
answer += caesar(x, n)
return answer
def caesar(c, n):
if 65 <= ord(c) <= 90:
asciiValue = ord(c)+n
if asciiValue > 90:
asciiValue -= 26
return chr(asciiValue)
elif 97 <= ord(c) <= 122:
asciiValue = ord(c)+n
if asciiValue > 122:
asciiValue -= 26
return chr(asciiValue)
elif c == ' ':
return ' '
- 숫자 문자열과 영단어
해당 문제는 c언어나 java같은 언어로 했다면 더욱 복잡했겠지만 python str은 replace라는 메소드를 지원해서 쉽게 구현하였다.
def solution(s):
# replace 메소드를 사용하여 모든 숫자문자열을 숫자로 바꾼다.
s = s.replace("zero", "0")
s = s.replace("one", "1")
s = s.replace("two", "2")
s = s.replace("three", "3")
s = s.replace("four", "4")
s = s.replace("five", "5")
s = s.replace("six", "6")
s = s.replace("seven", "7")
s = s.replace("eight", "8")
s = s.replace("nine", "9")
answer = int(s)
return answer
print(solution("one4seveneight"))
- 크기가 작은 부분문자열
function solution(t, p) {
const pLength = p.length;
let answer = 0;
let num;
for(let i=0; i<t.length-(pLength-1); i++) {
num = Number(t.slice(i, i+pLength));
if(num <= Number(p))
answer++;
}
return answer;
}
- 삼총사
function solution(number) {
let answer = 0;
const len = number.length;
for(let f=0; f<len-2; f++) {
for(let s=f+1; s<len-1; s++) {
for(let t=s+1; t<len; t++) {
if((number[f]+number[s]+number[t]) === 0)
answer++;
}
}
}
return answer;
}
'coding 연습 > 프로그래머스' 카테고리의 다른 글
프로그래머스 level 2 sql 문제들 (0) | 2023.10.04 |
---|---|
프로그래머스 level1 문제들(정답률50%이하) (0) | 2023.09.24 |
프로그래머스 level1 문제들(정답률50%~60%) (0) | 2023.09.24 |
프로그래머스 level1 문제들(정답률60%~70%) (0) | 2023.09.24 |
프로그래머스 level 1 sql 문제들 (0) | 2023.09.23 |