꾸준히 안타치기
1주 기초문제 모음 본문
✅ 10172 - 개
# 개 - 역슬래시를 단독으로 사용하려면 두개를 써야함.
# 큰따옴표 - \" 이거두개를써야 큰따옴표표기
print("|\\_/|")
print("|q p| /}")
print("( 0 )\"\"\"\\")
print("|\"^\"` |")
print("||_/=\\\\__|")
✅1001 - A-B
a, b = input().split()
print(int(a) - int(b))
✅ 10430 - 나머지 (% 사용)
A,B,C = input().split()
A = int(A)
B = int(B)
C = int(C)
print((A+B) % C)
print(((A%C) + (B%C)) % C)
print((A*B)%C)
print(((A%C) * (B%C)) % C)
✅ 10860 - 사칙연산 https://dev-note-97.tistory.com/65
a,b = input().split()
a = int(a)
b = int(b)
print(a+b)
print(a-b)
print(a*b)
print(a//b) - /로 하면 2.3333333333333335 나옴 //해야 결과의 몫을 가져옴
print(a%b)
✅ 11654 - 아스키코드
a = input()
print(ord(a))
ord() : 문자의 아스키 코드값을 리턴하는 함수이다.
chr() : 아스키 코드값 입력으로 받아 그 코드에 해당하는 문자를 출력하는 함수이다.
✅ 1330 - 두수비교하기 (조건문)
1) if조건식 코드
a, b = input().split()
a = int(a)
b = int(b)
if a > b:
print('>')
elif a < b:
print('<')
else:
print('==')
2) 삼항 연산자 코드
A,B = map(int,input().split())
print('>') if A > B else print('<') if A < B else print('==')
✅ 9498 - 시험성적 (조건문)
a = int(input())
if a >= 90:
print("A")
elif a >= 80:
print("B")
elif a >= 70:
print("C")
elif a >= 60:
print("D")
else:
print("F")
✅ 14681 - 사분면 고르기
x = int(input())
y = int(input())
if x > 0 and y > 0:
print("1")
elif x < 0 and y > 0:
print("2")
elif x < 0 and y < 0:
print("3")
elif x > 0 and y < 0:
print("4")
✅ 2753 - 윤년 (윤년은 연도가 4의 배수이면서(and) 100의 배수가 아닐때 / 또는 400의 배수 일때)
n = int(input())
if (n % 4 == 0 and n % 100 != 0) or n % 400 == 0:
print(1)
else:
print(0)
1) if - else 조건식
year = int(input())
if ((year%4 == 0)and(year%100 != 0)) or (year%400 == 0):
print('1')
else:
print('0')
2)삼항 연산자
year = int(input())
print('1') if ((year%4 == 0)and(year%100 != 0)) or (year%400 == 0) else print('0')
✅ 1712 - 손익분기점 *** https://ctkim.tistory.com/153 https://ooyoung.tistory.com/80
a, b, c = map(int, input().split())
if b >= c:
print(-1)
else:
print(a//(c-b)+1)
a = 고정비 b = 변동비 c = 노트북가격 , n = 생산대수
a, b, c = map(int, input().split())
// 가변비용이 노트북가격보다 같거나 크면, 무조건 손해
if b >= c:
print(-1)
// 소수점제거를 위해 //사용
else:
// a/(c-b)은 딱 손익분기점이므로 +1 부터 최초이익이 발생
print(a//(c-b)+1)
a+b*n = c*n / n을 구하는 식은 n = a/(c-b)가 된다.
고정비용/(가격 - 가변비용) → a /(c-b) , a/(c-b)은 딱 손익분기점이므로 +1 부터 최초이익이 발생
✅ 2884 - 알람시계 https://velog.io/@iillyy/백준-2884번-파이썬
10시 10분 10시 45분, 0시 50분 (-45분 했을때)
hour, min = map(int,input().split())
if min >= 45:
print(hour, min-45)
elif hour>0 and min < 45:
print(hour-1, min+15)
else:
print(23, min+15)
hour, min = map(int, input().split())
if min >= 45:
print(hour, min - 45)
elif hour > 0 and min < 45:
print(hour-1, min + 15)
elif hour == 0 and min < 45:
print(23, min + 15)
✅ 2525 - 오븐시계 https://jjyoung.tistory.com/5
https://thingjin.tistory.com/entry/백준-2525번-오븐-시계-파이썬
hour, min = map(int, input().split())
add = int(input()) #조리시간
h = (hour + (min + add) // 60) % 24 # 시간값구하기 몫이 시간
m = (min + add) % 60 # 나머지가 분
print(h,m)
✅2438 - 별찍기 https://ooyoung.tistory.com/39
n = int(input())
// 1부터 n만큼 반복한다.
for i in range(1, n+1):
// 별을 찍는다. i번만큼
print('*' * i)
✅2439 - 별찍기2 (공백넣기)
n = int(input())
for i in range(1, n+1):
print(" "*(n-i) +'*' * i)
✅2731 - N찍기
✅11022번 - A+B (f’ string 활용, 반복문) https://ooyoung.tistory.com/38
t = int(input())
for x in range(1, t+1):
a, b = map(int, input().split())
print(f'Case #{x}: {a} + {b} = {a+b}')
✅ 8393 - 합( 1부터 n까지의 정수의 합 공식은 n*(n+1)/2이다.)
n = int(input())
print(n*(n+1)//2)
1) for문 코드
n = int(input())
total = 0 # 변수에 0을 지정
for i in range(1, n+1) :# 1부터 n까지
total += i # total = total + i와 같은 의미print(total)
2) sum함수 이용한 줄 코드
print(sum(range(1, int(input())+1)))
✅ 10871 - X보다 작은수 https://wook-2124.tistory.com/227
n, x = map(int, input().split())
num = list(map(int, input().split()))
for i in range(n):
if num[i] < x:
print(num[i], end = " ")
t, x = map(int, input().split())
num = list(input().split())
for i in num:
if (int(i) < x):
print(i, end=' ')
// n, x 입력 받기 (10 5)
n, x = map(int, input().split())
// list입력을 각각 받아서 num에 넣음 (1 10 4 9 2 3 8 5 7 6 )
num = list(map(int, input().split()))
// n의 크기 만큼 반복한다.
for i in range(n):
// num의 숫자가 x보다 작으면 프린트한다.
if num[i] < x:
// num[i]와 띄어쓰기 넣기
print(num[i], end = " ")
✅ 2444 - 다이아몬드 찍기 https://heewon9809.tistory.com/86
N=int(input())
for i in range(1,N+1):
print(" "*(N-i)+"*"*(2*i-1))
for k in range(N-1,0,-1):
print(" "*(N-k)+"*"*(2*k-1))
✅ 1085 - 직사각형에서 탈출 ( min함수 사용 )
x, y, w, h = map(int, input().split())
print(min(x , y , w-x, h-y))
✅ 3009 - 네번째점 ????
https://ooyoung.tistory.com/103
https://happylulurara.tistory.com/95
x_nums = []
y_nums = []
for _ in range(3):
x, y = map(int, input().split())
x_nums.append(x)
y_nums.append(y)
for i in range(3):
if x_nums.count(x_nums[i]) == 1:
x4 = x_nums[i]
if y_nums.count(y_nums[i]) == 1:
y4 = y_nums[i]
print(x4, y4)
x_ = []
y_ = []
for _ in range(3):
x, y = map(int, input().split())
x_.append(x)
y_.append(y)
for i in range(3):
if(x_.count(x_[i]) == 1):
x = x_[i]
if(y_.count(y_[i]) == 1):
y = y_[i]
print(x,y)
✅ 4153 직각삼각형 - 피타고라스정리
https://omins.tistory.com/8 제일긴변의 길이 C
while True:
lst = list(map(int, input().split()))
if lst[0] == 0 and lst[1] == 0 and lst[2] == 0:
break
lst.sort()
if lst[0]**2 + lst[1]**2 == lst[2]**2 :
print('right')
else:
print('wrong')
3가지의 수를 입력받아서 list에 넣는다.
이때 들어있는 수가 0일때는 빠져나온다.
넣고나서, sort()한다. 오름차순순서대로 정렬
피타고라스의 정의 a의 제곱 + b의 제곱이 c의 제곱값과 같다면
right를 출력 아니면 wrong을 출력
✅ 10872 - 팩토리얼( =계승)
1) 재귀 함수: 함수 자기 자신을 호출하는 함수
https://ooyoung.tistory.com/114
def factorial(n):
result = 1
if n > 0 :
result = n * factorial(n-1)
return result
n = int(input())
print(factorial(n))
2) for문 코드
n = int(input())
result = 1
if n > 0:
for i in range(1, n+1):
result *= i
print(result)
result = 1 0이 입력되면 1이 호출
0보다 크면 if조건식 아래 for문이 반복되는 동안 1부터 n까지 곱한 수가 result값이 된다.
1부터 입력 받은 수까지의 수를 반복적으로 곱한다.
✅ 2562 - 최대값
1) 9개의 수를 for문으로 입력받는 코드
numbers = []
for _ in range(9):
i = int(input())
numbers.append(i)
print(max(numbers))
print(numbers.index(max(numbers))+1)
2) for문을 list comprehension 으로 작성한 코드
numbers = [int(input()) for _ in range(9)]
print(max(numbers))
print(numbers.index(max(numbers)) + 1)
https://ooyoung.tistory.com/55
✅ 2577 - 숫자의 개수
https://wook-2124.tistory.com/233
numbers = [int(input()) for _ in range(3)]
result = list(str(numbers[0]* numbers[1]* numbers[2]))
for i in range(10):
print(result.count(str(i)))
a = int(input())
b = int(input())
c = int(input())
result = list(str(a*b*c))
for i in range(10):
print(result.count(str(i)))
3가지 숫자를 입력받는다.
a = int(input())
b = int(input())
c = int(input())
그 정수값을 문자열로 변환해서 하나하나를 그 세가지 수를 곱한후 리스트에 담는다.
result = list(str(abc))
반복문을 사용해서 각자리수 만큼 값을 result에 담는다. 이때 담긴(i)를 문자로 변환하고 갯수를 count로 세서 result에 넣어준다.
for i in range(10):
print(result.count(str(i))
정수 → 문자열로 바꾼후 → list에 넣고 count함수를 사용하기 위해 str로 바꾼후 출력
✅ 3052 - 나머지
https://wook-2124.tistory.com/250
빈 리스트 n = []을 만든다.
for문으로 0-9까지 반복한다.
a로 변수를 입력받고 b변수로는 a를 로 나눈 나머지 값을 넣어준다.
이것을 아까 만든리스트에 append한다. n = [39, 40, 41, 0, 1, 2, 40, 41, 0 ,1]
이것을 set함수를 이용해서 중복을 제거해준다.
그리고 leng함수를 이용해서 리스트의 길이를 출력해준다.
수를 여러번 입력받고 나눠서 리스트에 담고 중복을 제거한뒤에 몇개인지 출력 하는 문제
n = []
for _ in range(10):
a = int(input())
b = a % 42
n.append(b)
s = set(n)
print(len(s))
✅ 8958번 -OX퀴즈
https://ooyoung.tistory.com/61
n = int(input())
for _ in range(n):
ox_list = list(input())
score = 0
sum_score = 0 # 새로운 ox리스트를 입력 받으면 점수 합계를 리셋한다.
for ox in ox_list:
if ox == 'O':
score += 1 # 'O'가 연속되면 점수가 1점씩 커진다.
sum_score += score # sum_score = sum_score + score
else:
score = 0
print(sum_score)
✅ 11720 - 숫자의 합
https://ooyoung.tistory.com/67
n = int(input())
nums = input()
total = 0
for i in range(n):
total += int(nums[i])
print(total)
sum으로 구하기
n = int(input())
print(sum(map(int, input())))
✅ 10809 - 알파벳찾기
https://velog.io/@0sunset0/백준-10809-파이썬-알파벳-찾기
각각의 알파벳에 들어있으면 1, 없으면 -1 출력
1. for문 이용
S = list(input())
c = 'abcdefghijklmnopqrstuvwxyz'
for i in c:
if i in S:
print(S.index(i), end =' ')
else:
print(-1, end=' ')
for문을 이용하여 a부터 z까지 S에 그 알바벳이 있는지 검사한다.
있으면 인덱스를 출력하고
없으면 -1을 출력한다.
2. find() 이용
S = input()
for x in 'abcdefghijklmnopqrstuvwxyz':
print(S.find(x), end = ' ')
find 함수는 어떤 찾는 문자가 문자열 안에서 첫 번째에 위치한 순서를 숫자로 출력한다.만일 찾는 문자가 문자열 안에 없는 경우에는 -1을 출력하는 함수이다.
✅ 2675 - 문자열반복
https://pacific-ocean.tistory.com/41
https://www.acmicpc.net/problem/2675
n = int(input()) // n입력받음
for in range(n):
num, t = input().split() // 3 ABC입력받음
text='' // 빈텍스트배열 생성
for i in t:
text += int(num)*i 텍스트에 글자를 i*num 번 반복해서 담는다.정수로 변환해줘야함
print(text)
✅ 1152 - 단어의 개수
https://wook-2124.tistory.com/223
word = input.split() // 넣었다고 치면 The Curious Case of Benjamin Button
print(len(word))// word = [The, Curious, Case, of, Benjamin, Button]의 갯수
띄어쓰기 기준으로 단어를 잘라서 word에 넣고 이것의 갯수를 반환
✅ 2908 - 상수
인덱스활용
a, b = input().split
newa = int(a[2]+ a[1]+a[0]
newb = int(b[2]+b[1]+b[0]
print(max(newa, newb))
입력받은 단어의 인덱스를 사용해서 거꾸로 뒤집어준다.
max를 사용해 a와 b중 큰수를 출력한다.
reversed()활용
a, b = input().split()
print(max("".join(reversed(a)), "".join(reversed(b))))
✔ 내장함수 reversed()는 iterator의 요소를 역순으로 반환한다. 이때 reversed 객체를 반환하여 주므로 이를 문자열로 바꾸기 위해 ''.join을 활용해주었다.
✅15552 - 빠른 A+B
https://www.acmicpc.net/problem/15552
n = int(sys.stdin.readline())
a,b = map(int, sys.stdin.readline(). split())
import sys
n = int(sys.stdin.readline())
for i in range(n):
a,b = map(int, sys.stdin.readline(). split())
print(a+b)
✅ 10162 - 전자레인지( 수학 공약수)
3개의 버튼으로 T초를 맞출 수 없으면 음수 -1을 첫 줄에 출력해야 한다. → 최대공약수 https://mathbang.net/202
3개의 버튼을 눌러서 나올 수 없는 수는 , 3개의 버튼 시간의 최대공약수로 나눴을때 나눠 떨어지지않는다는 의미이다.
n = int(input())
if n%10 != 0:
print(-1)
else:
for i in [300, 60, 10]:
print(n//i, end=' ')
n = n%i
✅ 1439 - 뒤집기******(on/off버튼느낌)
https://data-flower.tistory.com/35?category=949036
- 숫자를 0으로 다 뒤집거나 1로 다 뒤집는다.
- 0으로 뒤집을 때의 횟수와 1로 뒤집을 때의 횟수를 비교하여 작은 값을 출력한다.
# 1439번 뒤집기
data = input()
count0 = 0 # 전부 0으로 바뀌는 경우
count1 = 0 # 전부 1로 바뀌는 경우
# 첫 번째 원소에 대해서 처리
if data[0] == '1':
count0 += 1
else:
count1 += 1
# 두 번째 원소부터 모든 원소를 확인하며
for i in range(len(data)-1):
# 연달은 문자가 다를때(0 혹은 1)
if data[i] != data[i+1]:
# 다음 수에서 1로 바뀌는 경우
if data[i+1] == '1':
count0 += 1
# 다음 수에서 0으로 바뀌는 경우
else:
count1 += 1
print(min(count0, count1))
✅ 1316 - 그룹단어 체커 ???
https://ooyoung.tistory.com/79
그룹단어는 서로다른 알파벳으로 이어진 단어..
같은단어는 연속해서만 나올수 있다.
n = int(input())
group_word = 0
for _ in range(n):
word = input()
error = 0
for index in range(len(word)-1): # 인덱스 범위 생성 : 0부터 단어개수 -1까지
if word[index] != word[index+1]: # 연달은 두 문자가 다른 때,
new_word = word[index+1:] # 현재글자 이후 문자열을 새로운 단어로 생성
if new_word.count(word[index]) > 0: # 남은 문자열에서 현재글자가 있있다면
error += 1 # error에 1씩 증가.
if error == 0:
group_word += 1 # error가 0이면 그룹단어
print(group_word)
✅ 5618 - 공약수
https://intrepidgeeks.com/tutorial/bai-jun-5618-common-divisor
import sys
# 두 수의 공약수는 두 수의 최대공약수의 약수
def gcd(a, b):
if a == 0:
return b
return gcd(b % a, a)
n = int(sys.stdin.readline())
num = list(map(int, sys.stdin.readline().split())) # 두 수 혹은 세 수 입력받음
g = gcd(num[0], gcd(num[1], num[-1])) # 두 수 혹은 세 수의 최대공약수
for i in range(1, g // 2 + 1): # 1부터 최대공약수의 절반만큼
if g % i == 0: # 최대공약수를 나누어 떨어지게 하면 약수
print(i)
print(g) # 최대공약수 자신도 출력
✅ 2309 - 일곱난쟁이 ***
# 9개의 값을 받아서 정수형으로 변환해 담는다.
# 배열의 합을 totalSum에 담는다.
arr = [int(input()) for _ in range(9)]
totalSum = sum(arr)
for i in range(9):
totalSum -= arr[i]
for j in range(i+1, 9):
totalSum -= arr[j]
if totalSum == 100:
arr.remove(arr[j])
arr.remove(arr[i])
break
totalSum += arr[j]
else:
totalSum += arr[i]
continue
break
arr.sort() // 오름차순으로 정렬
print(*arr, sep="\n")
'CS > 백준' 카테고리의 다른 글
1417 - 국회의원 선거 (0) | 2022.07.11 |
---|---|
7785 - 회사에 있는 사람(map) (0) | 2022.07.11 |
1712 - 손익분기점 (0) | 2022.06.29 |
10172 - 개 (0) | 2022.06.29 |
3040 - 백설 공주와 일곱 난쟁이 ( 조합, 순열 ) (0) | 2022.06.29 |