select p.product_code, (sum(os.sales_amount) * p.price) as sales
from offline_sale os
left join product p on os.product_id = p.product_id
group by os.product_id
order by sales desc, p.product_code asc
Q. 조건에 맞는 도서와 저자 리스트 출력하기 | Level 2
select b.book_id , a.author_name, DATE_FORMAT(b.published_date, "%Y-%m-%d") as published_date
from author a
inner join book b on a.author_id = b.author_id and b.category = '경제'
order by b.published_date asc
-- DATE_FORMAT !!
Q. 없어진 기록 찾기 |Level 3
/* 오답!
select ao.animal_id, ao.name
from animal_outs ao
inner join animal_ins ai on ao.animal_id != ai.animal_id
order by ao.animal_id;
*/
select ao.animal_id, ao.name
from animal_outs ao
left join animal_ins ai on ao.animal_id = ai.animal_id
where ai.animal_id is null
order by ao.animal_id;
-- !! a left join b on a.key = b.key where b.key is null 조건 !
Q. 있었는데요 없었습니다 |Level 3
select ai.animal_id, ai.name
from animal_ins ai
inner join animal_outs ao on ai.animal_id = ao.animal_id
where ao.datetime < ai.datetime
order by ai.datetime
Q. 오랜 기간 보호한 동물(1) |Level 3
select ai.name, ai.datetime
from animal_ins ai
left join animal_outs ao on ai.animal_id = ao.animal_id
where ao.animal_id is null
order by ai.datetime asc
limit 3
Q. 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 | Level 4 >> 하는 즁 !
/* 오답
select
A.car_id
, A.car_type
, round(daily_fee*30*(1-discount_rate/100),0) as fee
from (
select *
from car_rental_company_car crcc
where crcc.car_type in ('세단', 'SUV')
and crcc.car_id not in (
select crcrh.car_id -- 대여 불가 (기간 내 대여중)
from car_rental_company_rental_history crcrh
where crcrh.start_date between '2022-11-01' and '2022-12-01'
or crcrh.end_date between '2022-11-01' and '2022-12-01'
)
) A
left join (
select *
from car_rental_company_discount_plan crcdp
where crcdp.duration_type like "30%"
order by discount_rate desc
) B
on A.car_type = B.car_type
-- fee 조건 ...
order by fee desc, car_type asc, car_id desc
*/
-- 대여 start_date, end_date 조건 주의 !
-- CAST(REPLACE(DISCOUNT_RATE, '%', '') AS DECIMAL) 안해도 되네 ?
-- (1-DISCOUNT_RATE/100) 계산식
SELECT
WAREHOUSE_ID
, WAREHOUSE_NAME
, ADDRESS
, IFNULL(FREEZER_YN,'N') as FREEZER_YN
FROM FOOD_WAREHOUSE
WHERE ADDRESS LIKE '경기도%'
ORDER BY WAREHOUSE_ID
Q.이름이 없는 동물의 아이디
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NULL
ORDER BY ANIMAL_ID
Q.이름이 있는 동물의 아이디
SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
ORDER BY ANIMAL_ID
Q.NULL 처리하기
SELECT
ANIMAL_TYPE
, IFNULL(NAME,"No name") as NAME
, SEX_UPON_INTAKE
FROM ANIMAL_INS
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
WHERE (FOOD_TYPE,FAVORITES) IN (SELECT FOOD_TYPE,MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE)
ORDER BY FOOD_TYPE DESC
Q.저자 별 카테고리 별 매출액 집계하기
SELECT
au.AUTHOR_ID
, au.AUTHOR_NAME
, bo.CATEGORY
, SUM(SALES*PRICE) as TOTAL_SALES
FROM BOOK_SALES as bs
INNER JOIN BOOK as bo ON bs.BOOK_ID = bo.BOOK_ID
INNER JOIN AUTHOR as au ON bo.AUTHOR_ID = au.AUTHOR_ID
WHERE YEAR(bs.SALES_DATE)=2022
AND MONTH(bs.SALES_DATE)=1
GROUP BY au.AUTHOR_NAME, bo.CATEGORY
ORDER BY au.AUTHOR_ID , bo.CATEGORY DESC
Q.자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기
SELECT CAR_TYPE, COUNT(*) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE (OPTIONS LIKE '%통풍시트%'
OR OPTIONS LIKE '%열선시트%'
OR OPTIONS LIKE '%가죽시트%')
#WHERE OPTIONS LIKE '%시트%'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE
Q.조건에 맞는 사용자와 총 거래금액 조회하기
/*
SELECT WRITER_ID
FROM USED_GOODS_BOARD
WHERE STATUS='DONE'
GROUP BY WRITER_ID
HAVING SUM(PRICE)>=700000
*/
SELECT ugb.WRITER_ID, ugu.NICKNAME, SUM(ugb.PRICE) as TOTAL_SALES
FROM USED_GOODS_BOARD as ugb
JOIN USED_GOODS_USER as ugu ON ugb.WRITER_ID = ugu.USER_ID
WHERE STATUS='DONE'
GROUP BY ugb.WRITER_ID
HAVING SUM(ugb.PRICE)>=700000
ORDER BY TOTAL_SALES
Q.성분으로 구분한 아이스크림 총 주문량
SELECT
ii.INGREDIENT_TYPE as INGREDIENT_TYPE
,SUM(TOTAL_ORDER) as TOTAL_ORDER
FROM FIRST_HALF as fh
LEFT JOIN ICECREAM_INFO as ii ON fh.FLAVOR=ii.FLAVOR
GROUP BY ii.INGREDIENT_TYPE
ORDER BY TOTAL_ORDER
Q.카테고리 별 도서 판매량 집계하기
SELECT
b.CATEGORY as CATEGORY
,SUM(SALES) as TOTAL_SALES
FROM BOOK_SALES as bs
LEFT JOIN BOOK as b ON bs.BOOK_ID = b.BOOK_ID
WHERE YEAR(bs.SALES_DATE)=2022 and MONTH(bs.SALES_DATE)=1
GROUP BY b.CATEGORY
ORDER BY CATEGORY
Q.진료과별 총 예약 횟수 출력하기
SELECT
MCDP_CD as 진료과코드
,COUNT(*) as 5월예약건수
FROM APPOINTMENT
WHERE DATE_FORMAT(APNT_YMD,"%Y-%m-%d") LIKE "2022-05-%"
GROUP BY MCDP_CD
ORDER BY 5월예약건수,진료과코드
Q.자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기
SELECT
CAR_ID
,MAX(
#CASE WHEN ('2022-10-16' between DATE_FORMAT(START_DATE,"%Y-%m-%d") and DATE_FORMAT(END_DATE,"%Y-%m-%d") )
CASE WHEN ('2022-10-16' between START_DATE and END_DATE )
THEN '대여중'
ELSE '대여 가능' END
) as AVAILABILITY
#,MAX(if('2022-10-16' between START_DATE and END_DATE, '대여중','대여 가능'))
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID #CAR_ID별로 기록하기 위함
ORDER BY CAR_ID DESC
/*
MAX()함수는 GROUP BY와 함께 사용해야함
GROUP BY를 통해 CAR_ID 기준으로 묶어주고,
위 조건을 MAX() 통해 반환하면
, 같은 CAR_ID 중에 가장 큰 값이 실행 결과로 나타난다.
*/
Q.대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기
SELECT MONTH(START_DATE) as MONTH, CAR_ID, COUNT(HISTORY_ID) as RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE CAR_ID IN (
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE MONTH(START_DATE) between 8 and 10
GROUP BY CAR_ID
HAVING COUNT(HISTORY_ID)>=5
)
AND MONTH(START_DATE) between 8 and 10
GROUP BY MONTH, CAR_ID
HAVING RECORDS>0
ORDER BY MONTH,CAR_ID DESC
Q.식품분류별 가장 비싼 식품의 정보 조회하기
/* 틀린 답
SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
GROUP BY CATEGORY
HAVING CATEGORY IN ('과자', '국', '김치', '식용유')
ORDER BY PRICE DESC
*/
SELECT CATEGORY, PRICE AS MAX_PRICE ,PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE (CATEGORY,PRICE) IN (
SELECT CATEGORY,MAX(PRICE) AS MAX_PRICE
FROM FOOD_PRODUCT
GROUP BY CATEGORY
HAVING CATEGORY IN ('과자', '국', '김치', '식용유')
)
ORDER BY MAX_PRICE DESC
Q.고양이와 개는 몇 마리 있을까
SELECT ANIMAL_TYPE,count(*)
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE
Q.동명 동물 수 찾기
SELECT NAME, COUNT(*)
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME)>=2
ORDER BY NAME
Q.년, 월, 성별 별 상품 구매 회원 수 구하기
SELECT YEAR(os.SALES_DATE) as YEAR
,MONTH(os.SALES_DATE) as MONTH
,ui.GENDER as GENDER
,COUNT(distinct ui.USER_ID) as USERS
FROM ONLINE_SALE as os
INNER JOIN USER_INFO as ui
ON os.USER_ID = ui.USER_ID
WHERE GENDER IS NOT NULL
GROUP BY YEAR , MONTH, GENDER
ORDER BY YEAR , MONTH, GENDER
Q.입양 시각 구하기(1)
SELECT HOUR(DATETIME) AS HOUR , COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) between 9 and 19
GROUP BY HOUR
ORDER BY HOUR
Q.입양 시각 구하기(2)#***
/*
틀린 답
SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
ORDER BY HOUR
*/
/*
SET @변수명 = 대입값;
SELECT @변수명 := 대입값; # :=는 할당 연산자
*/
SET @HOUR = -1;
SELECT (@HOUR := @HOUR +1) AS HOUR,
(SELECT COUNT(HOUR(DATETIME))
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME)=@HOUR) AS COUNT
FROM ANIMAL_OUTS
WHERE @HOUR < 23;
Q.가격대 별 상품 개수 구하기 #***
SELECT
TRUNCATE(PRICE,-4) as PRICE_GROUP #4자릿수를 버림.
, COUNT(*) as PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP
/*
TRUNCATE(PRICE,-4) #4자릿수를 버림.
TRUNC(수, [, 자릿수])
수를 지정된 소수점 자리까지 버림하여 반환해주는 함수이다.
자릿수를 명시하지 않았을 경우 기본값은 0 . 즉, 정수로 반환
*/
SELECT MEMBER_ID,MEMBER_NAME,GENDER,DATE_FORMAT(DATE_OF_BIRTH,"%Y-%m-%d")
FROM MEMBER_PROFILE
WHERE MONTH(DATE_OF_BIRTH)=3
AND GENDER='W'
AND TLNO is not null
ORDER BY MEMBER_ID;
/*
DATE_FORMAT(DATE_OF_BIRTH, 원하는 형식)
DATE_FORMAT(DATE_OF_BIRTH, "%Y-%m-%d") AS BIRTH, #1992-03-16
DATE_FORMAT(DATE_OF_BIRTH, "%Y") AS YEAR,
DATE_FORMAT(DATE_OF_BIRTH, "%m") AS MONTH,
DATE_FORMAT(DATE_OF_BIRTH, "%d") AS DAY
*/
Q.12세 이하인 여자 환자 목록 출력하기
SELECT PT_NAME, PT_NO, GEND_CD, AGE, ifnull(TLNO,'NONE') as TLNO
FROM PATIENT
WHERE AGE<=12
and GEND_CD='W'
ORDER BY AGE DESC, PT_NAME ASC
/*
IFNULL(Column명, "Null일 경우 대체 값")
*/
Q.평균 일일 대여 요금 구하기
SELECT ROUND(AVG(DAILY_FEE),0) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE='SUV';
Q.인기있는 아이스크림
SELECT FLAVOR
FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC,SHIPMENT_ID ASC
Q.흉부외과 또는 일반외과 의사 목록 출력하기
SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD,"%Y-%m-%d") as HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD IN ('CS','GS')
ORDER BY HIRE_YMD DESC, DR_NAME
Q.조건에 맞는 도서 리스트 출력하기
SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE,"%Y-%m-%d") as PUBLISHED_DATE
FROM BOOK
WHERE YEAR(PUBLISHED_DATE)=2021
AND CATEGORY='인문'
Q.조건에 부합하는 중고거래 댓글 조회하기
SELECT
ugb.TITLE
, ugb.BOARD_ID
, ugr.REPLY_ID
, ugr.WRITER_ID
, ugr.CONTENTS
, DATE_FORMAT(ugr.CREATED_DATE,"%Y-%m-%d") as CREATED_DATE
FROM USED_GOODS_BOARD as ugb
INNER JOIN USED_GOODS_REPLY as ugr
ON ugb.BOARD_ID = ugr.BOARD_ID
WHERE YEAR(ugb.CREATED_DATE) = 2022
AND MONTH(ugb.CREATED_DATE) = 10
ORDER BY ugr.CREATED_DATE, ugb.TITLE
Q.과일로 만든 아이스크림 고르기
SELECT ii.FLAVOR
FROM ICECREAM_INFO as ii
INNER JOIN FIRST_HALF as fh
ON ii.FLAVOR = fh.FLAVOR
WHERE fh.TOTAL_ORDER>3000
and ii.INGREDIENT_TYPE = 'fruit_based'
ORDER BY fh.TOTAL_ORDER DESC
Q.서울에 위치한 식당 목록 출력하기
SELECT
ri.REST_ID
,ri.REST_NAME
,ri.FOOD_TYPE
,ri.FAVORITES
,ri.ADDRESS
,ROUND(AVG(rr.REVIEW_SCORE),2) as SCORE
FROM REST_INFO as ri
INNER JOIN REST_REVIEW as rr
ON ri.REST_ID = rr.REST_ID
WHERE ri.ADDRESS LIKE '서울%'
GROUP BY ri.REST_ID #***
ORDER BY SCORE DESC, ri.FAVORITES DESC
Q.강원도에 위치한 생산공장 목록 출력하기
SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS LIKE '강원도%'
ORDER BY FACTORY_ID
Q.재구매가 일어난 상품과 회원 리스트 구하기
SELECT USER_ID,PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID,PRODUCT_ID
HAVING COUNT(*) > 1
ORDER BY USER_ID, PRODUCT_ID DESC
Q.모든 레코드 조회하기
SELECT ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
Q.오프라인/온라인 판매 데이터 통합하기
SELECT DATE_FORMAT(SALES_DATE,"%Y-%m-%d") as SALES_DATE
,PRODUCT_ID
,USER_ID
,SALES_AMOUNT
FROM ONLINE_SALE
WHERE MONTH(SALES_DATE)=3
#WHERE SALES_DATE LIKE '2022-03%'
#WHERE DATE_FORMAT(ons.SALES_DATE,"%Y-%m")='2022-03'
UNION
SELECT DATE_FORMAT(SALES_DATE,"%Y-%m-%d") as SALES_DATE
,PRODUCT_ID
,NULL as USER_ID
,SALES_AMOUNT
FROM OFFLINE_SALE
WHERE MONTH(SALES_DATE)=3
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID
/*
UNION (DISTINCT) : 쿼리의 결과를 합친다. 중복된 ROW는 제거
<-> UNION ALL
*/
Q.역순 정렬하기
SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC
Q.아픈 동물 찾기
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION='Sick'
ORDER BY ANIMAL_ID
Q.어린 동물 찾기
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION!='Aged'
ORDER BY ANIMAL_ID
Q.동물의 아이디와 이름
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
Q.여러 기준으로 정렬하기
SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME , DATETIME DESC
Q.상위 n개 레코드
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1
Q.조건에 맞는 회원수 구하기
SELECT count(*) #count(USER_ID) as USERS
FROM USER_INFO
WHERE AGE between 20 and 29 #AGE >= 20 and AGE<=29
and YEAR(JOINED)=2021
def solution(num1, num2):
return 1 if num1==num2 else -1
Q.분수의 덧셈***
def solution(numer1, denom1, numer2, denom2): #**
answer = []
x=numer1*denom2+denom1*numer2
y=denom1*denom2
#약분>최대공약수 : 공통되는 약수 중에서 최대 값
'''
#틀림 ㅠ 왜 ?
for i in range(2,min(x,y)) :
if x%i==0 and y%i==0 :
x=x//i
y=y//i
'''
'''
import math
gcd(): 최대공약수
lcm(): 최소공배수
'''
'''
#for문으로 최대 공약수 찾기
for i in range(min(x,y),0,-1) : #뒤에서 부터
if x%i==0 and y%i==0 :
x=x//i
y=y//i
break
'''
'''
#유클리드 호제법으로 최대 공약수(GCD, Greatest Common Divisor)를 찾기
def euclidean_algorithm(a, b):
# 큰 수와 작은 수를 구분하여 대입
if a < b:
a, b = b, a
# b가 0이 될 때까지 반복
while b != 0:
# a를 b로 나눈 나머지를 a에 대입하고, b에는 이전의 a를 대입
a, b = b, a % b
# 최대 공약수인 a를 반환
return a
'''
'''
#유클리드 호제법2
def gcd(a, b):
while b > 0:
a, b = b, a % b
return a
'''
a=x
b=y
if a<b :
a,b = b,a
while b>0 :
a,b = b, a%b
z=a #최대 공약수
x=x//z
y=y//z
answer.append(x)
answer.append(y)
return answer
Q.배열 두 배 만들기
def solution(numbers):
return [i*2 for i in numbers]
def solution(array):
answer = 0
'''
#런타임 에러 ㅠ
cont=[0]*(len(array)+1)
for i in array :
cont[i]+=1
maxCont=-1
tmp=[]
for i in range(len(cont)) :
if maxCont<cont[i] :
maxCont=cont[i]
for i in range(len(cont)) :
if cont[i] == maxCont :
tmp.append(i)
if len(tuple(tmp))>1 :
answer = -1
else :
answer = tmp[0]
'''
'''
#런타임 에러 ㅠ
cont=[0]*(len(array)+1) #카운트 배열 생성
for i in array :
cont[i]+=1
maxVal=0 #최빈값 출연 횟수
for i in cont :
if i == max(cont) :
maxVal+=1;
if maxVal > 1 :
answer = -1
else :
answer = cont.index(max(cont))
'''
while len(array)!=0 :
for i,x in enumerate(set(array)) :
array.remove(x)
if i==0 :
return x
return -1
return answer
Q.짝수는 싫어요
def solution(n):
answer = [i for i in range(1,n+1) if i%2!=0]
return answer
#return [i for i in range(1, n+1, 2)]
DAY 4.수학, 배열 Q.피자 나워 먹기 (1)
def solution(n):
answer = 0
i=1
while 7*i<n :
i+=1
answer = i
return answer
'''
if n%7 != 0:
answer = (n//7) + 1
else:
answer = n//7
'''
Q.피자 나워 먹기 (2)
def solution(n):
answer = 0
i=1
while True : #while(1):
if (6*i)%n==0 :
answer=i
break
i+=1
return answer
Q.피자 나워 먹기 (3)
def solution(slice, n):
answer = 0
i=1
while (1):
if (slice*i)>=n :
answer=i
break
i+=1
return answer
def solution(num_list):
for i in range (len(num_list)//2) :
num_list[i],num_list[len(num_list)-1-i] = num_list[len(num_list)-1-i], num_list[i]
return num_list
#return num_list[::-1]
#num_list.reverse()
#while(num_list):
# result.append(num_list.pop())
DAY 6.문자열, 반복문, 출력, 배열, 조건문 Q.문자열 뒤집기
def solution(my_string):
answer = ''
for x in my_string :
answer=x+answer
return answer
#return my_string[::-1]
#return ''.join(list(reversed(my_string)))
#for i in range(len(my_string)-1, -1, -1) :
# answer += my_string[i]
Q.직각삼각형 출력하기
n = int(input())
for i in range(1,n+1) :
for j in range(i) :
print("*",sep='',end='')
print()
#for i in range(n):
# print('*'*(i+1))
Q.짝수 홀수 개수
def solution(num_list):
sum1=0
sum2=0
for x in (num_list):
if x%2==0 :
sum1+=1
else :
sum2+=1
answer=[sum1,sum2]
return answer
'''
answer = [0,0]
for n in num_list:
answer[n%2]+=1
'''
Q.문자 반복 출력하기
def solution(my_string, n):
answer = ''
for x in my_string :
answer+=((x)*n)
return answer
#return ''.join(i*n for i in my_string)
DAY 7.문자열, 조건문, 수학, 반복문 Q.특정 문자 제거하기
def solution(my_string, letter):
answer = ''
for x in my_string :
if x!=letter :
answer+=x
return answer
#return my_string.replace(letter, '')
#return ''.join([c for c in my_string if c != letter])
def solution(emergency):
answer = []
tmp=sorted(emergency,reverse=True)
for i in emergency :
answer.append(tmp.index(i)+1)
return answer
#return [sorted(emergency, reverse=True).index(e) + 1 for e in emergency]
Q.순서쌍의 개수
def solution(n):
answer = 0
for i in range(1,n+1) :
if n%i==0 :
answer+=1
return answer
def solution(letter):
answer = ''
morse = {
'.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
'--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
'--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
'...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
'-.--':'y','--..':'z'
}
for x in list(letter.split()) :
answer+=morse.get(x)
#answer+=morse[x]
return answer
Q.가위 바위 보
def solution(rsp):
answer = ''
for x in rsp :
if x=='0':
answer+='5'
elif x=='2':
answer+='0'
elif x=='5':
answer+='2'
return answer
'''
d = {'0':'5','2':'0','5':'2'}
return ''.join(d[i] for i in rsp)
'''
Q.구슬을 나누는 경우의 수
def solution(balls, share):
answer = 0
def fac(n):
ret=1
for i in range(1,n+1) :
ret*=i
return ret
answer = fac(balls)//((fac(balls-share))*fac(share))
return answer
'''
서로 다른 n개 중 m개를 뽑는 경우의 수 공식
조합 nCm = (n-m)!*m! 분의 n!
n!
---------
(n-m)!*m!
'''
'''
import math
def solution(balls,share):
return math.comb(balls,share)
'''
DAY 10.조건문, 배열, 수학, 시뮬레이션 Q.점의 위치 구하기
def solution(dot):
answer = 0
x=dot[0]
y=dot[1]
if x>0 :
if y>0:
answer=1
elif y<0:
answer=4
if x<0:
if y>0:
answer=2
elif y<0:
answer=3
return answer
Q.2차원으로 만들기
def solution(num_list, n):
answer=[]
for i in range(0,len(num_list),n) :
answer+=[num_list[i:i+n]]
#answer.append(num_list[i:i+n])
return answer
def solution(n):
answer = 0
for i in range(1,n+1):
cont=0
for j in range(1,i+1):
if i%j==0:
cont+=1
if cont>=3:
answer+=1
return answer
Q.최댓값 만들기(1)
def solution(numbers):
maxValue=-2147000000
for i in range(len(numbers)) :
for j in range(i+1,len(numbers)) :
if numbers[i]*numbers[j]>maxValue:
maxValue=numbers[i]*numbers[j]
return maxValue
'''
numbers.sort()
return numbers[-2] * numbers[-1]
numbers = sorted(numbers, reverse=True)
return numbers[0]*numbers[1]
'''
Q.팩토리얼
def solution(n):
answer = 0
i=1
while (1):
answer=i
tmp=1
for j in range(1,i+1) :
tmp*=j
if tmp==n :
break
elif tmp>n:
answer=i-1
break
else :
i+=1
return answer
'''
factorial = 1
while factorial <= n:
answer += 1
factorial = factorial * answer
answer -= 1
'''
DAY 12.문자열, 정렬, 사칙연산, 수학 Q.모음 제거
def solution(my_string):
answer = ''
for x in my_string:
if x=='a' or x=='e' or x=='i' or x=='o' or x=='u':
continue
answer+=x
return answer
'''
vowels = ['a','e','i','o','u']
for vowel in vowels:
my_string = my_string.replace(vowel, '')
'''
Q.문자열 정렬하기 (1)
def solution(my_string):
answer = []
for x in my_string :
if x.isalpha() : #if i.isdigit():
continue
answer.append(int(x))
answer.sort()
return answer
Q.숨어있는 숫자의 덧셈 (1)
def solution(my_string):
answer = 0
for x in my_string :
if x.isdigit():
answer+=int(x)
return answer
Q.소인수분해***
def solution(n):
answer = []
x=2
while x<=n :
if n%x==0 :
if x not in answer :
answer.append(x)
n=n//x
else :
x+=1
return answer
DAY 13.문자열, 배열, 사칙연산, 수학, 조건문 Q.컨트롤 제트
def solution(s):
answer = 0
tmp=s.split()
for i in range(len(tmp)) :
if tmp[i]=="Z":
answer-=int(tmp[i-1])
else :
answer+=int(tmp[i])
return answer
Q.배열 원소의 길이
def solution(strlist):
answer = []
for x in strlist :
answer.append(len(x))
return answer
#return [len(str) for str in strlist]
Q.중복된 문자 제거
def solution(my_string):
answer = ''
tmp=[]
x=list(my_string)
for i in my_string :
if i not in tmp :
tmp.append(i)
answer+=i
return answer
'''
answer = ''
for i in my_string:
if i not in answer:
answer+=i
return answer
'''
def solution(array, n):
answer = 0
minValue=2147000000
for x in array :
if abs(n-x) < minValue :
minValue=abs(n-x)
answer=x
if minValue == abs(n-x) and answer>x:
answer=x
return answer
Q.369게임
def solution(order):
answer = 0
for x in str(order) :
if x=='3' or x=='6' or x=='9':
answer+=1
return answer
Q.암호 해독
def solution(cipher, code):
answer = ''
for i in range(code-1,len(cipher),code) :
answer+=cipher[i]
return answer
# return cipher[code-1::code]
Q.대문자와 소문자
def solution(my_string):
answer = ''
for x in my_string :
if x.isupper():
answer+=x.lower()
elif x.islower():
answer+=x.upper()
return answer
#return my_string.swapcase()
def solution(s):
answer = ''
tmp=[]
for x in s :
if s.count(x)==1 :
tmp.append(x)
tmp=sorted(tmp)
answer=answer.join(tmp)
return answer
Q.약수 구하기
def solution(n):
answer = []
for i in range(1,n+1) :
if n%i==0 :
answer.append(i)
return answer
DAY 16.문자열, 수학, 배열, 조건문 Q.편지
def solution(message):
return len(message)*2
Q.가장 큰 수 찾기
def solution(array):
#answer.append(max(array))
#answer.append(array.index(max(array)))
maxValue=-2147000000
idx=0
for i in range(len(array)) :
if array[i]>maxValue :
maxValue=array[i]
idx=i
answer=[maxValue,idx]
return answer
Q.문자열 계산하기
def solution(my_string):
answer = 0
'''
#런타임 에러ㅠ
a,b,c=(my_string).split()
if str(b)=="+" :
answer=int(a)+int(c)
elif str(b)=="-":
answer=int(a)-int(c)
'''
my_string=my_string.split()
answer=int(my_string[0])
for i in range(2,len(my_string)) :
if my_string[i-1]=="+" :
answer+=int(my_string[i])
elif my_string[i-1]=="-" :
answer-=int(my_string[i])
return answer
#solution=eval
Q.배열의 유사도
def solution(s1, s2):
answer = 0
for i in range (len(s1)) :
for j in range(len(s2)) :
if s1[i]==s2[j] :
answer+=1
break
return answer
#return len(set(s1)&set(s2));
#set()의 & 연산자는 두 집합(sets) 간의 교집합을 반환
'''
for word in s1:
if word in s2:
answer += 1
else:
continue
'''
DAY 17.문자열, 수학, 조건문, 배열, 사칙연산 Q.숫자 찾기
def solution(num, k):
answer = 0
num=str(num)
for i in range(len(num)) :
if int(num[i])==k:
answer=i+1
break
else :
answer=-1
return answer
Q.n의 배수 고르기
def solution(n, numlist):
answer = []
for x in numlist :
if x%n==0 :
answer.append(x)
return answer
#answer = [i for i in numlist if i%n==0]
Q.자릿수 더하기
def solution(n):
answer = 0
n=str(n)
for x in n :
answer+=int(x)
return answer
#return sum(int(i) for i in str(n))
Q.OX퀴즈
def solution(quiz):
answer = []
for x in quiz :
x,a,y,b,z = x.split()
if str(a)=="+" :
if int(x)+int(y)==int(z) :
answer.append('O')
else :
answer.append('X')
elif str(a)=="-" :
if int(x)-int(y)==int(z) :
answer.append('O')
else :
answer.append('X')
return answer
DAY 18.문자열, 수학, 조건문, 정렬 Q.문자열안에 문자열
def solution(str1, str2):
answer = 1 if str1.find(str2)>=0 else 2
return answer
#return 1 if str2 in str1 else 2
def solution(array):
answer = 0
for x in array :
for i in range(len(str(x))) :
if str(x)[i]=='7':
answer+=1
return answer
#return str(array).count('7')
Q.잘라서 배열로 저장하기
def solution(my_str, n):
answer = []
for i in range(0,len(my_str),n):
answer.append(my_str[i:i+n])
return answer
Q.중복된 숫자 개수
def solution(array, n):
return array.count(n)
Q.머쓱이보다 키 큰 사람
def solution(array, height):
answer = 0
array.sort()
for x in array :
if x>height :
answer+=1
return answer
'''
array.append(height)
array.sort(reverse=True)
return array.index(height)
'''
DAY 20.수학, 시뮬레이션, 문자열, 사칙연산 Q.직사각형 넓이 구하기
def solution(dots):
answer = 0
a=set()
b=set()
for x in dots :
a.add(x[0])
b.add(x[1])
x=abs(list(a)[0]-list(a)[1])
y=abs(list(b)[0]-list(b)[1])
answer=x*y
return answer
#return (max(dots)[0] - min(dots)[0])*(max(dots)[1] - min(dots)[1])
'''
x, y = [], []
for dot in dots:
x.append(dot[0])
y.append(dot[1])
return (max(x) - min(x)) * (max(y) - min(y))
'''
Q.캐릭터의 좌표
def solution(keyinput, board):
answer = []
dx=[1,0,-1,0]
dy=[0,-1,0,1]
x=0
y=0
print((board[0]//2),(board[1]//2))
for k in keyinput :
if k=="right" :
i=0
elif k=="down" :
i=1
elif k=="left" :
i=2
elif k=="up" :
i=3
if abs(x+dx[i])>(board[0]//2) or abs(y+dy[i])>(board[1]//2) :
continue
x=x+dx[i]
y=y+dy[i]
answer=[x,y]
return answer
def solution(my_string):
answer = 0
for i in range(len(my_string)) :
if my_string[i].isalpha() :
my_string=my_string.replace(my_string[i],' ')
my_string = list(map(int,my_string.split()))
answer = sum(my_string)
return answer
Q.안전지대***
def solution(board):
answer = 0
dx=[-1,0,1,1,0,0,-1,-1]
dy=[0,1,0,0,-1,-1,0,0]
n=len(board)
tmp=[]
'''
for i in board :
print(i)
'''
#지뢰 위치 파악
for i in range(n):
for j in range(n) :
if board[i][j]==1 :
tmp.append([i,j])
for t in tmp :
x,y=t #지뢰 위치
for i in range(8) :
'''
#틀림 ㅠ
if(x+dx[i]>=n or y+dy[i]>=n or x+dx[i]<0 or y+dy[i]<0) :
continue
x=x+dx[i]
y=y+dy[i]
if board[x][y]==1 :
continue
board[x][y]=1
'''
x=x+dx[i]
y=y+dy[i]
if 0 <= x < n and 0 <= y < n:
board[x][y] = 1
#안전지대 카운팅
for i in range(n):
for j in range(n):
if board[i][j]==0:
answer+=1
return answer
Q.삼각형의 완성조건 (2)
def solution(sides):
answer = 0
#가장 큰 변의 길이 값이 sides 안에 있는 경우
for i in range(max(sides)-min(sides)+1,max(sides)+1):
answer+=1
#아닌 경우
for i in range(max(sides)+1,max(sides)+min(sides)):
answer+=1
return answer
Q.외계어 사전
def solution(spell, dic):
answer = 2
for d in dic :
if len(set(spell)-set(d))==0 : #차집합
#if not (set(spell)-set(d)) : #차집합
answer=1
break
return answer
DAY 22.dp, 수학, 조건문, 배열 Q.저주의 숫자 3
def solution(n):
answer = 0
i=1 #3x 마을에서 쓰는 숫자
cont=1 #10진법
while cont<=n :
#print('10진법 : ', cont , ' 3x 마을: ',i)
if(cont==n) :
answer = i
if (str(i).find('3')>=0) or (i%3==0) :
#if i % 3 and '3' not in str(i):
i+=1
else :
cont+=1
i+=1
return answer
Q.평행***
def solution(dots):
answer = 0
#기울기가 같다면 평행
#기울기 = y좌표의차이/x좌표의차이
cont=1
while cont<=3 :
if cont==1 :
d1,d2,d3,d4 = dots[0],dots[1],dots[2],dots[3]
if cont==2 :
d1,d2,d3,d4 = dots[0],dots[2],dots[1],dots[3]
if cont==3 :
d1,d2,d3,d4 = dots[0],dots[3],dots[1],dots[2]
l1=(d1[1]-d2[1])/(d1[0]-d2[0])
l2=(d3[1]-d4[1])/(d3[0]-d4[0])
'''
if d1[1]-d2[1]==0 or d1[0]-d2[0]==0 :
l1=0
else :
l1=(d1[1]-d2[1])/(d1[0]-d2[0])
if d3[1]-d4[1]==0 or d3[0]-d4[0]==0 :
l2=0
else :
l2=(d3[1]-d4[1])/(d3[0]-d4[0])
'''
if l1==l2:
return 1
cont+=1
return answer
Q.겹치는 선분의 길이***
def solution(lines):
answer = 0
'''
tmps=[]
for l in lines :
tmp=[]
for i in range(min(l),max(l)) :
tmp.append(i)
tmps.append(set(tmp))
print('tmps:',tmps) # [{0}, {2, 3, 4}, {3, 4, 5, 6, 7, 8}]
'''
'''
집합(set) 자료형
교집합 s1 & s2
합집합 s1 | s2
차집합 s1 - s2
값 1개 추가하기 - add(): add(1)
값 여러 개 추가하기 - update() : s1.update([4, 5, 6])
특정 값 제거하기 - remove() : s1.remove(2)
'''
sets=[ set(range(min(l),max(l))) for l in lines] #range(min(l), max(l)): 최소값과 최대값 사이의 숫자들로 이루어진 범위를 생성
#range(start, end+1)로 하면 오류남 .. 시작점이 같은 것만 계산
answer = (len(sets[0]&sets[1] | sets[0]&sets[2] | sets[1]&sets[2])) #각 선분끼리의 교집합을 구하고 각각의 교집합의 합집합의 길이를 반환
return answer
Q.유한소수 판별하기
def solution(a, b):
''' 일부 테스트케이스 틀림.. 왜 ? ㅠ
answer = 0
if a%b==0 : #정수가 되는 경우
return 1
#최대공약수 찾기
x=max(a,b)
y=min(a,b)
while y!=0:
x,y=y,x%y
z=x #최대공약수
#분자와 분모의 최대공약수로 약분
a=a//z
b=b//z
#분모 약수 찾기
tmp=[]
for i in range(2,b+1):
if b%i==0 :
tmp.append(i)
print(tmp)
if (2 in tmp) or (5 in tmp) :
if (2 in tmp):
tmp.remove(2)
if (5 in tmp) :
tmp.remove(5)
if len(tmp)>0 :
return 2
else :
return 1
#elif (2 in tmp) and (5 in tmp) :
# while
else :
return 2
'''
answer = 0
#기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 합니다.
#정수도 유한소수로 분류
if a==b % a%b==0:
return 1
x=max(a,b)
y=min(a,b)
while y!=0 :
x,y=y,x%y
a=a//x #x = 최대공약수
b=b//x
for i in range(b//2) :
if b%2==0 :
b=b//2
if b==1 :
break
elif b%5==0:
b=b//5
if b==1 :
break
answer = 1 if b==1 else 2
return answer
'''
from math import gcd
def solution(a, b):
b //= gcd(a,b) #gcd (num1, num2....) : num1,num2... 들의 최대 공약수를 출력함
while b%2==0:
b//=2
while b%5==0:
b//=5
return 1 if b==1 else 2
'''
'''
from math import gcd
def solution(a, b):
b = b / gcd(a, b)
for i in [2, 5]:
while not b % i:
b //= i
return 1 if b == 1 else 2
'''
DAY 23.배열, 정렬, 문자열 Q.특이한 정렬***
def solution(numlist, n):
answer=[]
answer=sorted(numlist,reverse=True)
answer=sorted(answer,key=lambda x: abs(n-x))
#key=lambda x: abs(n - x) 의 값에서 나온 결과값이 작은 순서대로 정렬되는 것임.
'''#?
answer = sorted(numlist,key = lambda x : (abs(x-n), n-x))
'''
'''
sorted: 리스트를 정렬하는 파이썬 내장 함수입니다.
numlist: 정렬할 리스트입니다.
key: 정렬 기준을 지정하는 옵션입니다. key에는 함수를 전달할 수 있으며, 이 함수의 반환값을 기준으로 리스트를 정렬합니다.
lambda x: (abs(x - n), n - x): 람다 함수를 사용하여 각 원소 x에 대한 정렬 키를 정의합니다. 이 람다 함수는 튜플을 반환합니다.
첫 번째 요소는 x와 n 사이의 차이의 절댓값인 abs(x - n)입니다.
두 번째 요소는 x와 n 사이의 차이인 n - x입니다.
따라서 리스트 numlist는 주어진 키에 따라 정렬되어 answer에 할당됩니다.
이 코드의 결과는 numlist의 원소들이 주어진 n 값과의 차이에 따라 정렬된 리스트가 됩니다.
'''
return answer
Q.등수 매기기#***
def solution(score):
answer = []
tmp=[]
for i in score :
tmp.append(sum(i)/len(i))
#print('tmp',tmp)
sort_tmp = sorted(tmp,reverse=True)
#print('sort_tmp',sort_tmp)
#tmmp=[]
for t in tmp :
#print('for: t ',t, ' sort_tmp.index(t)',sort_tmp.index(t))
answer.append(sort_tmp.index(t)+1)
''' #틀림 ㅠ
for i,j in score :
tmp.append((i+j)//2)
tmp.sort(reverse=True)
print('tmp',tmp)
for i,j in score :
#print(tmp.index((i+j)//2)+1,end=' ')
answer.append(tmp.index((i+j)//2)+1)
#index()는 리스트에서 특정 원소의 인덱스를 반환해주는 함수, 중복된 원소가 있으면 가장 작은 인덱스를 리턴
'''
return answer
Q.옹알이 (1)#***
def solution(babbling):
words=["aya", "ye", "woo", "ma"]
answer = 0
tmp=[]
for b in babbling :
for w in words :
b=b.replace(w," ") #지우고 남은 문자끼리 합쳐지지 않도록 일부러 공백을 둔다.
#print('b',b,'strip()',b.strip())
tmp.append(b)
if not b.strip():
#만약 b가 공백 문자열이라면 if b.strip():는 if ''가 되어 거짓(False)이 되고, b가 공백 문자열이 아니라면 if b.strip():는 if b가 되어 참(True)이 됩니다.
answer+=1 #i가 공백 문자열 또는 문자열 내에 공백만 있는 경우에 참이 되고, 그 외의 경우에는 거짓이 됩니다.
break
'''
'abcdefg'.strip('a') : 인자로 전달된 문자를 String의 왼쪽과 오른쪽에서 제거합니다.
'abcdefg'.lstrip('a') : 인자로 전달된 문자를 String의 왼쪽에서 제거합니다.
'abcdefg'.rstrip('a') : 인자로 전달된 문자를 String의 오른쪽에서 제거합니다.
인자가 없을 경우 공백 제거
'''
return answer
Q.로그인 성공?
def solution(id_pw, db):
answer = ''
for d in db :
if d==id_pw :
answer='login'
break
elif str(d[0])==str(id_pw[0]):
answer='wrong pw'
break #*
'''
본 조건에도 break가 필요하다.
login과 wrong pw, fail에 우선 순위가 있기 때문임. 아래 반례 예시
입력값 〉 ["abc04", "345"], [["abc04", "335"], ["abc03", "345"]]
기댓값 〉 "wrong pw"
'''
else :
answer='fail'
return answer
def solution(bin1, bin2):
answer = ''
x=int(bin1,2) #int(bin1,2) : bin1 값을 2진수로 변환. 단, bin1 문자열을 받아 정수로 변환
y=int(bin2,2)
#print(bin(x + y))
answer = bin(x + y)[2:] #ex : 0b11000 처럼 0b가 붙어 나오므로 자름
#bin(x + y).replace("0b","")
'''
-int('x',8) 함수 : 8/16/2진수 만자열을 정수형(int) 숫자로 형변환 할 수 있다.
-oct() : 10진수>8진수 문자열
-hex() : 10진수>16진수 문자열
-bin() : 10진수 > 2진수 문자열
'''
return answer
Q.A로 B 만들기
def solution(before, after):
answer = 0
tmp=''
size=len(before)
for i in range(size) :
x=after[i]
if x in before :
idx=before.index(x)
tmp+=before[idx]
before = before[:idx]+before[idx+1:]
else :
break
if tmp==after :
answer = 1
return answer
'''
before=sorted(before)
after=sorted(after)
if before==after:
return 1
else:
return 0
'''
Q.k의 개수
def solution(i, j, k):
answer = 0
arrs=list(range(i,j+1))
for a in arrs :
if str(k) in str(a) :
answer+=(str(a).count(str(k)))
return answer
#answer = sum([ str(i).count(str(k)) for i in range(i,j+1)])
DAY 25.시뮬레이션, 조건문, 수학 Q.문자열 밀기#***
def solution(A, B):
answer = 0
cnt=0
for i in range(len(A)) :
if A == B :
break
else :
A=list(A)
A.insert(0,A.pop())
A=''.join(A)
cnt+=1
if A==B :
answer = cnt
else :
answer = -1
return answer
'''
from collections import deque
def solution(A, B):
a, b = deque(A), deque(B)
for cnt in range(0, len(A)):
if a == b:
return cnt
a.rotate(1)
return -1
'''
Q.종이 자르기 #***
def solution(M, N):
answer = 0
answer=(M*N)-1
'''
종이를 1번 자르면 2장
종이를 2번 자르면 3장
종이를 3번 자르면 4장
'''
return answer
Q.연속된 수의 합 #***
def solution(num, total):
answer = []
start=total
'''
9번 테스크 케이스만 안됨. 반례예시
#num=3,total=0,result=[-1,0,1] 일 경우를 위해
아래 if num>total 조건을 추가하였음
'''
if num>total :
start=total+num
while True :
arrs=list(range(start,start-num,-1))
if sum(arrs)==total:
answer=arrs
break
start-=1
'''
else :
arrs=list(range(start,start+num))
if sum(arrs)==total:
answer=arrs
break
start+=1
'''
answer=sorted(answer)
return answer
#return [(total - (num * (num - 1) // 2)) // num + i for i in range(num)]
'''댓글 해석 참조 펌
1. result를 일반화 시키면 [x+0, x+1, x+2, x+3 ... x + (num-1)]
2. 그리고 위 값을 전부 더한 값이 total이 됨. total = num*x + num*(num-1)//2 ※ result의 전체요소의 갯수는 num개 이므로 x의 갯수는 num개 이고 상수 부분은 첫번째 항이 0이고 마지막항이 num-1인 등차가 1인 등차수열의 합임.
3. 2번에서 도출한 공식을 이제 위 코드에 대입해보면 [(total - (num * (num - 1) // 2)) // num + i for i in range(num)] = [num*x + (num * (num - 1) // 2)) - (num * (num - 1) // 2)) // num + i for i in range(num)] = [num*x // num + i for i in range(num)] = [x + i for i in range(num)] 1번에서의 result x식과 일치하므로 정답이 됨.
'''
-최대공약수 (약분>최대공약수 : 공통되는 약수 중에서 최대 값) #for문으로 최대 공약수 찾기 for i in range(min(x,y),0,-1) : #뒤에서 부터 if x%i==0 and y%i==0 : x=x//i y=y//i break
#유클리드 호제법으로 최대 공약수(GCD, Greatest Common Divisor)를 찾기 def euclidean_algorithm(a, b): # 큰 수와 작은 수를 구분하여 대입 if a < b: a, b = b, a
# b가 0이 될 때까지 반복 while b != 0: # a를 b로 나눈 나머지를 a에 대입하고, b에는 이전의 a를 대입 a, b = b, a % b
# 최대 공약수인 a를 반환 return a
#유클리드 호제법2 def gcd(a, b): while b > 0: a, b = b, a % b return a
#math 사용하여 최대 공약수 찾기 ''' from math import gcd def solution(a, b): b //= gcd(a,b) #gcd (num1, num2....) : num1,num2... 들의 최대 공약수를 출력함 while b%2==0: b//=2 while b%5==0: b//=5 return 1 if b==1 else 2 '''
''' from math import gcd
def solution(a, b): b = b / gcd(a, b) for i in [2, 5]: while not b % i: b //= i
-최빈값 while len(array)!=0 : for i,x in enumerate(set(array)) : array.remove(x) if i==0 : return x return -1
-짧게 return [i*2 for i in numbers] answer = [i for i in range(1,n+1) if i%2!=0] return [i for i in range(1, n+1, 2)] return sum([i for i in range(2, n + 1, 2)]) answer = sorted(numlist,key = lambda x : (abs(x-n), n-x))
-배열 뒤집기 for i in range (len(num_list)//2) : num_list[i],num_list[len(num_list)-1-i] = num_list[len(num_list)-1-i], num_list[i] num_list[::-1] num_list.reverse() while(num_list): result.append(num_list.pop())
-문자열 뒤집기 for x in my_string : answer=x+answer return my_string[::-1] return ''.join(list(reversed(my_string))) for i in range(len(my_string)-1, -1, -1) : answer += my_string[i]
-리스트>문자열 str = ''.join(list)
-딕셔너리 dictionary dic = {"a": 1, "b": 2} dic[key] : dic["a"] > 1 #단, key 값이 없는 경우 에러 dic.get(key) : dic.get("a") > 1 #key 값이 없는 경우 None dict.get(key, default=None) : print(a.get("c", 0)) > 0 #key가 존재하지 않을 경우 default 값을 출력함
-조합 ; 경우의 수 서로 다른 n개 중 m개를 뽑는 경우의 수 공식 조합 nCm = (n-m)!*m! 분의 n! n! --------- (n-m)!*m!
import math def solution(balls,share): return math.comb(balls,share)
def fac(n): ret=1 for i in range(1,n+1) : ret*=i return ret answer = fac(balls)//((fac(balls-share))*fac(share))
-배열 회전 if direction=='right': numbers.insert(0,numbers.pop()) elif direction=='left': numbers.append(numbers.pop(0))
a, b = map(int, input().strip().split(' '))
print('a =', a)
print('b =', b)
Q.문자열 반복해서 출력하기
a, b = input().strip().split(' ')
b = int(b)
for i in range(b) :
print(a, end='')
Q.대소문자 바꿔서 출력하기
str = input()
str2=''
for x in str :
if x.isupper() :
str2+=x.lower()
else:
str2+=x.upper()
print(str2)
'''
오답(에러)
주어진 코드에서 출력이 원하는 대로 나오지 않는 이유는
반복문 안에서 x 변수에 대한 변환 작업은 원본 문자열인 str에 적용되지 않기 때문입니다.
Python에서 문자열은 불변(immutable)하며, 문자열을 수정하려면 새로운 문자열을 생성해야 합니다.
'''
for i in range(len(str)) :
if str[i].isupper() :
str[i].lower()
print(str[i])
else :
str[i]=str[i].upper()
print(str)
Q.특수문자 출력하기
출력예시 : !@#$%^&*(\'"<>?:;
print('!@#$%^&*(\\\'"<>?:;')
Day 2.출력, 연산 Q.덧셈식 출력하기
a, b = map(int, input().strip().split(' '))
print(a,'+',b,'=',a+b)
def solution(number, n, m):
#오답
#answer = 1 if number%(n*m)==0 else 0
answer = 1 if (number%n==0 and number%m==0) else 0
return answer
Q.홀짝에 따라 다른 값 반환하기
def solution(n):
answer = 0
if n%2==0 :
for i in range(2,n+1,2) :
answer+=i*i
else :
for i in range(1,n+1,2) :
answer+=i
return answer
Q.조건 문자열
def solution(ineq, eq, n, m):
answer = 0
#ㅎㅎ?
if ineq=='<':
if eq=='=' and n<=m :
answer = 1
if eq=='!' and n<m :
answer = 1
elif ineq=='>':
if eq=='=' and n>=m :
answer = 1
if eq=='!' and n>m :
answer = 1
return answer
Q.flag에 따라 다른 값 반환하기
def solution(a, b, flag):
answer = 0
answer = a+b if flag else a-b
return answer
DAY 5.조건문 Q.코드 처리하기
def solution(code):
ret = ''
mode=0
for i in range(len(code)) :
x=str(code[i])
if mode==0 :
if x!='1' and i%2==0 :
ret+=x
elif x=='1':
mode=1
else :
if x!='1' and i%2!=0 :
ret+=x
elif x=='1':
mode=0
#print(i, x, mode, ret, sep=' ')
ret= 'EMPTY' if ret=='' else ret
# return answer if answer else 'EMPTY'
return ret
Q.등차수열의 특정한 항만 더하기
def solution(a, d, included):
answer = 0
for i in range(len(included)) :
if included[i]==True :
answer+=a+(d*i)
return answer
Q.주사위 게임 2
def solution(a, b, c):
answer = 0
if a==b==c :
answer+=(a+b+c)*(a*a+b*b+c*c)*(a*a*a+b*b*b+c*c*c)
elif a==b or a==c or b==c :
answer+=(a+b+c)*(a*a+b*b+c*c)
else :
answer+=(a+b+c)
return answer
#answer *= a**(i+1)+b**(i+1)+c**(i+1)
Q.원소들의 곱과 합
def solution(num_list):
answer = 0
sum1=0
sum2=1
for x in num_list :
sum1+=x
sum2*=x
if sum1**2>sum2 :
answer = 1
elif sum1**2<sum2 :
answer = 0
return answer
#sum(num_list)
Q.이어 붙인 수
def solution(num_list):
answer = 0
a=''
b=''
for x in num_list :
if x%2==0 :
a+=str(x)
else :
b+=str(x)
answer = int(a) + int(b)
return answer
def solution(n, control):
for x in control :
if x=='w' :
n=n+1
elif x=='s':
n=n-1
elif x=='d':
n=n+10
elif x=='a':
n=n-10
return n
Q.수 조작하기 2
def solution(numLog):
answer = ''
for i in range(1,len(numLog)) :
tmp = numLog[i]-numLog[i-1]
if tmp==1 :
answer+='w'
elif tmp==-1:
answer+='s'
elif tmp==10:
answer+='d'
elif tmp==-10:
answer+='a'
return answer
Q.수열과 구간 쿼리 3
def solution(arr, queries):
for x in queries :
i,j=x[0],x[1]
arr[i],arr[j] = arr[j],arr[i]
return arr
#for a,b in queries:
# arr[a],arr[b]=arr[b],arr[a]
Q.수열과 구간 쿼리 2
def solution(arr, queries):
answer = []
for s,e,k in queries :
tmp=arr[s:e+1]
minValue = 2147000000
for x in tmp :
if x>k and minValue>x :
minValue = x
if minValue!=2147000000 :
answer.append(minValue)
else :
answer.append(-1)
return answer
#m=float('inf')
#min(tmp)
DAY 7.반복문 Q.수열과 구간 쿼리 4
def solution(arr, queries):
for s,e,k in queries :
#tmp = arr[s:e+1]
for i in range(s,e+1) :
if i%k==0 :
arr[i]=arr[i]+1
return arr
Q.배열 만들기 2
def solution(l, r):
answer = []
#*
for num in range(l,r+1):
if not set(str(num)) - set(['0','5']) :
answer.append(num)
'''
set(str(num))은 num을 문자열로 변환하고, 문자열을 중복되지 않는 집합(set)으로 변환합니다. 집합은 중복된 요소를 포함하지 않으므로, 각 문자가 한 번만 나타납니다.
set(['0', '5'])는 문자 '0'과 '5'로 이루어진 문자열 리스트를 집합으로 변환합니다.
그런 다음 set(str(num)) - set(['0', '5'])는 num을 문자열로 변환한 집합에서 '0'과 '5'로 이루어진 집합을 뺀 결과를 나타냅니다. 만약 num의 문자열 표현에 '0' 또는 '5'가 없다면, 이 연산 결과는 빈 집합이 됩니다.
'''
return answer if answer else [-1]
Q.카운트 업
def solution(start_num, end_num):
return list(range(start_num, end_num+1))
#return [i for i in range(start,end+1)]
Q.콜라츠 수열 만들기
def solution(n):
answer=[n]
while n>1 :
if n%2==0 :
n=n//2
else :
n=3*n+1
answer.append(n)
return answer
Q.배열 만들기 4
def solution(arr):
stk = []
i=0
while i < len(arr) :
if len(stk)==0 :
stk.append(arr[i])
i+=1
else :
if stk[-1] < arr[i] :
stk.append(arr[i])
i+=1
else :
stk.pop() #*
return stk
DAY 8.조건문,문자열 Q.간단한 논리 연산
def solution(x1, x2, x3, x4):
#논리합 OR ∨ , 논리곱 AND ∧ (True 1, False 0)
answer = True
a=(True if x1==True or x2==True else False)
b=(True if x3==True or x4==True else False)
answer = False if a==False or b==False else True
return answer
#return (x1 | x2) & (x3 | x4)
#return (x1 or x2) and (x3 or x4)
Q.주사위 게임 3
#런타임에러 ㅠ ㅠ
def solution(a, b, c, d):
answer = 0
x=set([a,b,c,d])
y=list([a,b,c,d])
if len(x)==1 :
answer=1111*a
elif len(x)==4 :
answer=min(x)
elif len(x)==3 :
ch=[0]*7
p=0
for i in y:
ch.insert(i,(ch[i]+1))
for i in ch:
if ch[i]>1 :
p=i
break
tmp=y
tmp.remove(p) #list.remove(value) 하나만 제거함
tmp.remove(p)
q=tmp[0]
r=tmp[1]
answer=q*r
elif len(x)==2 :
ch=list([0]*7)
for i in y:
ch[i]=ch[i]+1
#answer=int(str(ch[0])+str(ch[1])+str(ch[2])+str(ch[3])+str(ch[4])+str(ch[5])+str(ch[6]))
for i in range(len(ch)):
if ch[i]==3:
answer=333
tmp=y
p=i
tmp.remove(p)
tmp.remove(p)
tmp.remove(p)
q=tmp[0]
answer=(10*p+q)**2
break
if answer==0 :
tmp=list(x)
p=tmp[0]
q=tmp[1]
answer=(p+q)*abs(p-q)
return answer
#정답 코드 https://school.programmers.co.kr/questions/47795
def solution(a, b, c, d):
answer = 0
arr=[a,b,c,d]
counts=[arr.count(i) for i in arr] #각 숫자의 출현 횟수를 저장
if max(counts)==4 : #모두 같은 경우
answer=1111*a
elif max(counts)==3 : #pppq
p=arr[counts.index(3)]
q=arr[counts.index(1)]
answer=(10*p+q)**2
elif max(counts)==2: #ppqr or ppqq
if min(counts) == 2:
return (a + c) * abs(a - c) if a == b else (a + b) * abs(a - b) #?
else:
p = arr[counts.index(2)]
return (a * b * c * d) / p**2 #?
else : #모두 다른 경우
answer=min(arr)
return answer
Q.글자 이어 붙여 문자열 만들기
def solution(my_string, index_list):
answer = ''
for x in index_list :
answer+=my_string[x]
return answer
Q.9로 나눈 나머지
def solution(number):
return int(number)%9
Q.문자열 여러 번 뒤집기
def solution(my_string, queries):
for s,e in queries :
'''
for i in range(e-s+1//2) :
#my_string[s+i], my_string[e-i] = my_string[e-i],my_string[s+i] #오류남
'''
my_string = my_string[:s] + my_string[s:e+1][::-1] + my_string[e+1:]
#my_string[start:end+1][::-1]는 파이썬에서 문자열을 일부분 선택한 후 그 부분을 뒤집는 연산을 수행하는 코드
return my_string
DAY 9.문자열 Q.배열 만들기 5
def solution(intStrs, k, s, l):
answer = []
for x in (intStrs) :
x=int(x[s:s+l])
if x>k :
answer.append(x)
return answer
Q.부분 문자열 이어 붙여 문자열 만들기
def solution(my_strings, parts):
answer = ''
for i in range(len(my_strings)) :
str=my_strings[i]
s,e = parts[i]
answer+=str[s:e+1]
return answer
def solution(my_string, m, c):
return my_string[c-1::m]
Q.qr code
def solution(q, r, code):
answer = ''
for i in range(len(code)) :
if i%q == r :
answer+=code[i]
return answer
DAY 11.리스트(배열) Q.문자 개수 세기
def solution(my_string):
answer = []
#아스키코드 변환 ord():문자>숫자/chr():숫자>문자
answer=[my_string.count(chr(i)) for i in range(ord('A'), ord('Z') + 1)] + [my_string.count(chr(i)) for i in range(ord('a'), ord('z') + 1)]
return answer
Q.배열 만들기 1
def solution(n, k):
answer = []
for i in range(1,n+1) :
if i%k==0 :
answer.append(i)
return answer
#return [i for i in range(k,n+1,k)]
#return [i for i in range(1, n+1) if i % k == 0]
Q.글자 지우기
def solution(my_string, indices):
answer=''
for i in range(len(my_string)) :
if i not in indices :
answer +=my_string[i]
return answer
Q.카운트 다운
def solution(start, end_num):
answer=[]
ret=start
while ret >= end_num :
answer.append(ret)
ret-=1
return answer
#return list(range(start,end-1,-1))
Q.가까운 1 찾기
def solution(arr, idx):
answer = 0
for i in range(len(arr)):
if i >= idx and arr[i] == 1 :
answer=i
break
else :
answer=-1
return answer
def solution(num_list):
answer = 0
for x in num_list :
if x<0 :
answer=num_list.index(x) #index(): x를 찾은 가장 첫 번째 인덱스
break
else :
answer=-1
return answer
Q.배열 만들기 3
def solution(arr, intervals):
answer = []
for s,e in intervals :
for i in arr[s:e+1] :
answer.append(i)
return answer
#for a,b in intervals: answer+=arr[a:b+1]
Q.2의 영역
def solution(arr):
answer = []
s=0
e=0
for i in range(len(arr)):
if arr[i] == 2 :
s=i
break
for j in range(len(arr)-1,-1,-1):
if arr[j] == 2:
e=j
break
if arr.count(2)==0 :
answer.append(-1)
else :
answer+=arr[s:e+1]
return answer
#if 2 not in arr:
# return [-1]
#return arr[arr.index(2) : len(arr) - arr[::-1].index(2)]
Q.배열 조각하기
def solution(arr, query):
answer = []
for i in range(len(query)) :
if i%2==0 :
arr=arr[:query[i]+1]
else :
arr=arr[query[i]:]
return arr
def solution(str_list):
answer = []
for i in str_list :
if i=="l" :
answer=str_list[:str_list.index("l")]
break
elif i=="r":
answer=str_list[str_list.index("r")+1:]
break
return answer
Q.n번째 원소까지
def solution(num_list, n):
return num_list[:n]
Q.n개 간격의 원소들
def solution(num_list, n):
return num_list[::n]
DAY 14.리스트(배열) Q.홀수vs짝수
def solution(num_list):
answer = 0
sum1=0
sum2=0
for i in range(len(num_list)):
if i%2==0:
sum1+=num_list[i]
else :
sum2+=num_list[i]
answer=sum1 if sum1>=sum2 else sum2
return answer
#return max(sum(num_list[::2]), sum(num_list[1::2]))
Q.5명씩
def solution(names):
answer = []
for i in range(0,len(names),5):
answer.append(names[i])
return answer
#return names[::5]
Q.할 일 목록
def solution(todo_list, finished):
answer = []
for i in range(len(todo_list)) :
if not finished[i] :
answer.append(todo_list[i])
return answer
#return [work for idx, work in enumerate(todo_list) if not finished[idx]]
def solution(arr, queries):
answer = []
'''
#테스트 케이스 하나만 정답 .. 나머지 케이스 모두 틀림
for i in range(len(arr)):
if i<len(queries):
s,e = queries[i]
if s<=i<=e :
for j in range (s,e+1) :
arr[j] +=1
'''
for i,q in enumerate(queries) :
s=q[0]
e=q[1]
#if s<=i<=e :
for k in range(s,e+1) :
arr[k]+=1
return arr
DAY 15.리스트(배열),문자열 Q.조건에 맞게 수열 변환하기 1
def solution(arr):
answer = []
for idx,x in enumerate(arr) :
if x>=50 and x%2==0 :
arr[idx]=x//2
elif x<50 and x%2!=0 :
arr[idx]=x*2
return arr
Q.조건에 맞게 수열 변환하기 2
def solution(arr):
'''
#* ㅠ
answer = 0
arr2=[]
arr2.append(arr.copy()) #arr2.append(arr) 안됨.
for x in range(len(arr)) :
tmp=[]
for i in range(len(arr)) :
x = arr[i]
if x>=50 and x%2==0 :
arr[i]=x//2
elif x<50 and x%2!=0 :
arr[i]=x*2+1
tmp.append(arr[i])
arr2.append(tmp)
for i in range(len(arr2)) :
if arr2[i] == arr2[i+1] :
answer = i
break
'''
idx = 0
pre = arr
while True :
tmp = []
for x in pre :
if x>=50 and x%2==0 :
tmp.append(x//2)
elif x<50 and x%2!=0 :
tmp.append(x*2+1)
else :
tmp.append(x)
if pre == tmp :
break
idx+=1
pre=tmp
answer = idx
return answer
Q.1로 만들기
def solution(num_list):
answer = 0
for x in num_list :
while x>1 :
if x%2==0 :
answer+=1
x=x//2
elif x%2!=0 :
answer+=1
x=(x-1)//2
return answer
Q.길이에 따른 연산
def solution(num_list):
answer = 0
if len(num_list)>=11 :
for i in num_list :
answer+=i
elif len(num_list)<=10 :
answer+=1
for i in num_list :
answer*=i
return answer
#return sum(num_list) if len(num_list)>=11 else prod(num_list)
Q.원하는 문자열 찾기
def solution(myString,pat):
answer = 0
myString=myString.upper()
pat=pat.upper()
#if(myString.startswith(pat)) : answer=1 ##?? 안되는건가 ?
'''
#정확성: 90.9 ㅠ
for i in range(len(myString)-len(pat)) :
if myString[i:i+len(pat)] == pat :
answer = 1
break
'''
if pat in myString :
answer=1
return answer
#return int(pat.lower() in myString.lower())
DAY 16.문자열 Q.대문자로 바꾸기
def solution(myString):
return myString.upper()
Q.소문자로 바꾸기
def solution(myString):
return myString.lower()
Q.배열에서 문자열 대소문자 변환하기
def solution(strArr):
for i in range(len(strArr)):
if i%2==0:
strArr[i]=strArr[i].lower()
else :
strArr[i]=strArr[i].upper()
return strArr
Q.A 강조하기
def solution(myString):
answer = ''
for x in myString :
if x=='a':
answer+=x.upper()
elif x!="A" and x.isupper() :
answer+=x.lower()
else :
answer+=x
return answer
#return myString.lower().replace('a', 'A')
Q.특정한 문자를 대문자로 바꾸기
def solution(my_string, alp):
answer = ''
'''
for x in my_string :
if x==alp :
answer+=x.upper()
else :
answer+=x
'''
answer = my_string.replace(alp,alp.upper())
return answer
DAY 17.문자열 Q.특정 문자열로 끝나는 가장 긴 부분 문자열 찾기
def solution(myString, pat):
answer = ''
''' # 틀림
for i in range (len(myString)-len(pat),0,-1):
if myString[i:i+len(pat)] == pat :
answer = myString[:i+1] #ㅠ 틀림 .
break
'''
#index(), find() <--> rindex(), rfind() : 뒤에서 부터
#find(찾을 문자열), find(찾을 문자열, 시작 위치), find(찾을 문자열, 시작 위치, 종료 위치)
#만약 없을 경우 find()에서는 -1을 리턴하는 반면, index()에서는 ValueError가 발생
answer = myString[:myString.rfind(pat)+len(pat)]
return answer
Q.문자열이 몇 번 등장하는지
def solution(myString, pat):
answer = 0
for i in range(len(myString)-len(pat)+1) :
if myString[i:i+len(pat)] == pat :
answer+=1
return answer
Q.ad 제거하기
def solution(strArr):
answer = []
''' 틀림 ㅠ
for x in strArr :
if x.find("ad")>0 :
strArr.remove(x)
'''
for x in strArr :
if x.find("ad")<0 :
answer.append(x)
return strArr
#return [word for word in strArr if 'ad' not in word]
def solution(myString):
answer = []
for x in myString.split('x') :
answer.append(len(x))
return answer
#return [len(w) for w in myString.split('x')]
Q.문자열 잘라서 정렬하기
def solution(myString):
answer = []
tmp=myString.split('x')
for i in tmp :
if i!="" :
answer.append(i)
answer.sort()
return answer
#return sorted(ch for ch in myString.split('x') if ch)
'''
myString.split('x'): 문자열 myString을 'x'를 구분자로 사용하여 분할한 후 각 부분을 리스트로 반환합니다. 예를 들어, "ABCxDEFxGHI"를 "x"로 분할하면 ['ABC', 'DEF', 'GHI']가 됩니다.
for ch in myString.split('x') if ch: 리스트 컴프리헨션을 사용하여 분할된 문자열 중 빈 문자열("")을 필터링하여 제거합니다. 이 부분은 if ch 조건을 사용하여 빈 문자열이 아닌 경우에만 포함합니다.
sorted(): 리스트를 정렬합니다. 위 코드에서는 문자열이 사전순으로 정렬됩니다.
'''
Q.간단한 식 계산하기
def solution(binomial):
answer = 0
a,op,b = binomial.split()
if op=='+' :
answer=int(a)+int(b)
elif op=='-':
answer=int(a)-int(b)
elif op=='*':
answer=int(a)*int(b)
return answer
#return eval(binomial)
#expression (=식)을 문자열로 받아서, 실행하는 함수
Q.문자열 바꿔서 찾기
def solution(myString, pat):
answer = 0
tmp = ""
for ch in myString :
if ch=="B" :
tmp+="A"
else :
tmp+="B"
answer = 1 if tmp.find(pat)>=0 else 0
return answer
Q.rny_string
def solution(rny_string):
answer = ''
for i in range(len(rny_string)) :
if rny_string[i]=='m' :
answer+='rn'
else :
answer+=rny_string[i]
return answer
#return rny_string.replace('m', 'rn')
DAY 19.문자열,리스트(배열) Q.세 개의 구분자
def solution(myStr):
answer = []
x1=[]
for x in myStr.split('a') :
tmp = list(ch for ch in x.split('b') if ch)
x1+=tmp
x2=[]
for x in x1 :
tmp = list(ch for ch in x.split('c') if ch)
x2+=tmp
answer = x2 if len(x2)>0 else ["EMPTY"]
return answer
Q.배열의 원소만큼 추가하기
def solution(arr):
answer = []
for i in arr :
for x in range (i) :
answer.append(i)
return answer
Q.반 배열에 추가, 삭제하기
def solution(arr, flag):
answer = []
for i in range(len(arr)) :
if flag[i] :
for j in range (arr[i]*2) :
answer.append(arr[i])
else :
for j in range (arr[i]) :
answer.pop()
return answer
Q.배열 만들기 6
def solution(arr):
stk = []
for i in range(len(arr)) :
x=arr[i]
if len(stk)==0 :
stk.append(x)
elif stk[len(stk)-1]==x :
stk.pop()
elif stk[len(stk)-1]!=x :
stk.append(x)
if len(stk)==0 :
stk.append(-1)
return stk
#elif stk[-1] == arr[i]:
Q.무작위로 K개의 수 뽑기
def solution(arr, k):
answer = []
idx=0
while idx<len(arr) :
if arr[idx] not in answer :
answer.append(arr[idx])
if len(answer)==k :
break
idx+=1
if len(answer)<k :
while len(answer)<k:
answer.append(-1)
return answer
DAY 20.함수(메서드) Q.배열의 길이를 2의 거듭제곱으로 만들기
def solution(arr): #ㅠ
answer = []
i=1
while i<len(arr):
i=i*2
for j in range(i-len(arr)) :
arr.append(0)
return arr
'''
a = 1
b = len(arr)
while a < b :
a *= 2
return arr + [0] * (a-b)
'''
Q.배열 비교하기
def solution(arr1, arr2):
answer = 0
if len(arr1)==len(arr2) :
sum1=0
sum2=0
for i in range (len(arr1)) :
sum1+=arr1[i]
sum2+=arr2[i]
if sum1==sum2 :
answer = 0
else :
answer = 1 if sum1>sum2 else -1
else :
answer = 1 if len(arr1)>len(arr2) else -1
return answer
#sum(arr1), sum(arr2)
Q.문자열 묶기
def solution(strArr):
arr=[0]*(len(strArr)+1)
for x in strArr :
arr[len(x)]+=1
return max(arr)
'''
a=[0]*31
for x in strArr: a[len(x)]+=1
return max(a)
'''
Q.배열의 길이에 따라 다른 연산하기
def solution(arr, n):
if len(arr)%2==0 :
for i in range (1,len(arr),2) :
arr[i]+=n
else :
for i in range(0,len(arr),2) :
arr[i]+=n
return arr
Q.뒤에서 5등까지
def solution(num_list):
answer = []
for i in range(5):
x=min(num_list)
answer.append(x)
num_list.remove(x)
return answer
#return sorted(num_list)[:5]
DAY 21.함수(메서드) Q.뒤에서 5등 위로
def solution(num_list):
answer = []
#list.sort() 본 리스트를 정렬해서 반환
#sorted(리스트) 는 본 리스트를 기반하여 정렬한 새로운 리스트를 반환
return sorted(num_list)[5:]
Q.전국 대회 선발 고사
def solution(rank, attendance):
answer = 0
rank2=[]
for i in range(len(rank)) :
if attendance[i]==True :
rank2.append(rank[i])
a,b,c = sorted(rank2)[:3]
answer = 10000*rank.index(a) + 100*rank.index(b) + rank.index(c)
return answer
Q.정수 부분
def solution(flo):
return int(flo)
##flo//1
Q.문자열 정수의 합
def solution(num_str):
answer = 0
for x in num_str :
answer +=int(x)
return answer
Q.문자열을 정수로 변환하기
def solution(n_str):
return int(n_str)
DAY 22.함수(메서드), 조건문 활용 Q.0 떼기
def solution(n_str):
answer = ''
while True :
if n_str[0]=='0' :
n_str=n_str[1:]
else :
break
return n_str
#return n_str.lstrip('0')
#return str(int(n_str))
'''
'abcdefg'.strip('a') : 인자로 전달된 문자를 String의 왼쪽과 오른쪽에서 제거합니다.
'abcdefg'.lstrip('a') : 인자로 전달된 문자를 String의 왼쪽에서 제거합니다.
'abcdefg'.rstrip('a') : 인자로 전달된 문자를 String의 오른쪽에서 제거합니다.
인자가 없을 경우 공백 제거
'''
Q.두 수의 합
def solution(a, b):
return str(int(a)+int(b))
Q.문자열로 변환
def solution(n):
return str(n)
Q.배열의 원소 삭제하기
def solution(arr, delete_list):
for x in delete_list :
if x in arr :
arr.remove(x)
return arr
def solution(str1, str2):
return 0 if str2.find(str1)<0 else 1
#return int(str1 in str2)
Q.꼬리 문자열
def solution(str_list, ex):
answer = ''
for x in str_list :
if ex not in x :
answer +=x
return answer
Q.정수 찾기
def solution(num_list, n):
return 1 if n in num_list else 0
#return int(n in num_list)
Q.주사위 게임 1
def solution(a, b):
answer = 0
if a%2!=0 and b%2!=0 :
answer = a**2 + b**2
elif a%2==0 and b%2==0 :
answer = abs(a-b) #abs():절댓값 함수
else :
answer = 2*(a+b)
return answer
Q.날짜 비교하기
def solution(date1, date2):
answer = -1
for i in range (3) :
if date1[i]<date2[i] :
answer=1
break
elif date1[i]>date2[i]:
answer=0
break
if answer==-1 :
answer=0
return answer
DAY 24.조건문 활용, 반복문 활용, 이차원 리스트(배열) Q.커피 심부름
def solution(order):
answer = 0
for x in order :
if x=="iceamericano" or x=="americanoice"or x=="hotamericano" or x=="americanohot" or x=="americano" or x=="anything":
answer+=4500
elif x=="icecafelatte" or x=="cafelatteice" or x=="hotcafelatte" or x=="cafelattehot" or x=="cafelatte" :
answer+=5000
return answer
#if 'latte' in want:
Q.그림 확대
def solution(picture, k):
answer = []
for x in picture :
tmp=''
for i in x :
tmp+=i*k
for j in range(k) :
answer.append(tmp)
return answer
Q.조건에 맞게 수열 변환하기 3
def solution(arr, k):
if k%2==0:
for i,x in enumerate(arr) :
arr[i]=arr[i]+k
else :
for i,x in enumerate(arr) :
arr[i]=arr[i]*k
return arr
#return [i*k if k%2!=0 else i+k for i in arr]
Q.l로 만들기
def solution(myString):
answer = ''
#아스키코드 변환 함수
#ord():문자>숫자, chr():숫자>문자
for x in myString :
if ord(x)<ord('l'):
#if i < "l":
answer+='l'
else :
answer +=x
return answer
Q.특별한 이차원 배열 1
def solution(n):
answer=[]
for i in range (n) :
tmp=[]
for j in range(n) :
if i==j :
tmp.append(1)
else :
tmp.append(0)
answer.append(tmp)
return answer
'''
answer=[[0]*n for i in range(n)]
for i in range(n): answer[i][i]=1
'''
DAY 25.이차원 리스트(배열) Q.정수를 나선형으로 배치하기
#**
def solution(n):
answer=[[0]*n for _ in range(n)]
#시계방향 : 우,하,좌,상
dx=[0,1,0,-1]
dy=[1,0,-1,0]
x,y=0,0
answer[x][y]=1
k=2
while k<=n*n :
for i in range(4):
while True :
nx=x+dx[i]
ny=y+dy[i]
if nx>=n or ny>=n or nx<0 or ny<0 or answer[nx][ny]!=0:
break
answer[nx][ny]=k
x=nx
y=ny
k+=1
return answer
Q.특별한 이차원 배열 2
def solution(arr):
answer = 1
for i in range(len(arr)) :
for j in range(len(arr)) :
if arr[i][j] != arr[j][i] :
answer = 0
return answer
Q.정사각형으로 만들기
def solution(arr):
#x=len(arr) #행의 수
#y=len(arr[0]) #열의 수
if len(arr) > len(arr[0]) : #행의 수가 더 많을 경우
for i in range(len(arr)) :
for j in range(len(arr)-(len(arr[i]))) :
arr[i].append(0)
elif len(arr) < len(arr[0]) : #열의 수가 더 많을 경우
for i in range(len(arr[0])-len(arr)):
arr.append([0]*len(arr[i]))
return arr
Q.이차원 배열 다각선 순회하기
def solution(board, k):
answer = 0
for i in range(len(board)) :
for j in range(len(board[0])) :
if i+j<=k :
answer +=board[i][j]
return answer
사용 문법 정리
-입출력 str = input() a = int(input()) a, b = map(int, input().strip().split(' '))
-set : 중복되지 않는 집합(set) answer=set() 차집합 set(str(num)) - set(['0','5'])
-짧게 return [i for i in range(start,end+1)] return [i for i in range(k,n+1,k)] return [i for i in range(1, n+1) if i % k == 0] return list(range(start,end-1,-1)) return [work for idx, work in enumerate(todo_list) if not finished[idx]] return sum(num_list) if len(num_list)>=11 else prod(num_list) return [word for word in strArr if 'ad' not in word] return sorted(ch for ch in myString.split('x') if ch) return sorted(num_list)[:5] return [i*k if k%2!=0 else i+k for i in arr]
-논리연산 #논리합 OR ∨ , 논리곱 AND ∧ (True 1, False 0) a=(True if x1==True or x2==True else False) b=(True if x3==True or x4==True else False) #return (x1 | x2) & (x3 | x4) #return (x1 or x2) and (x3 or x4)
-정렬 -sort()/sorted() sort() : answer.sort(), list.sort(reverse=True) 리스트 원본값을 직접 수정함 sorted() : ret=sorted(list), ret=sorted(list,reverse=True) 리스트 원본 값은 그대로이고 정렬 값을 반환함
-함수 count() : counts=[arr.count(i) for i in arr] #각 숫자의 출현 횟수를 저장 copy() : arr2.append(arr.copy()) #arr2.append(arr) 안됨. abs() : 절댓값
-find( )/index() <--> rindex(), rfind() : 뒤에서 부터 find() : x.find("ad") #find(찾을 문자열), find(찾을 문자열, 시작 위치), find(찾을 문자열, 시작 위치, 종료 위치) 찾는 문자가 없는 경우에 -1을 출력 문자열만 사용이 가능 index() : num_list.index(x) x를 찾은 가장 첫 번째 인덱스 찾는 문자가 없는 경우에 ValueError 에러가 발생 문자열, 리스트, 튜플 자료형에서 사용 가능하고 딕셔너리 자료형에는 사용 불가 myString.rfind(pat)
-문자열 관련 endsWith(),startswith(): my_string.endswith('abc') endsWith() 는 특정문자열로 어떤 string이 특정문자열로 끝나는지를 검사해서 그 값을 Boolean값으로 반환 replace() : replace('a', 'A') , my_string.replace(alp,alp.upper()) split() : myString.split(), myString.split(''), myString.split('x') strip() 인자가 없을 경우 공백 제거 'abcdefg'.strip('a') : 인자로 전달된 문자를 String의 왼쪽과 오른쪽에서 제거합니다. 'abcdefg'.lstrip('a') : 인자로 전달된 문자를 String의 왼쪽에서 제거합니다. 'abcdefg'.rstrip('a') : 인자로 전달된 문자를 String의 오른쪽에서 제거합니다.
-아스키코드 변환 ord() : ord('A') 문자>숫자 chr() : chr(65) 숫자>문자
- from math import prod prod() : num_list 원소값을 모두 곱한 값을 리턴 return sum(num_list) if len(num_list)>=11 else prod(num_list)
-2차원 배열 answer=[[0]*n for i in range(n)] answer=[[0]*n for _ in range(n)] for s,e in intervals : for a,b in intervals: answer+=arr[a:b+1] return [work for idx, work in enumerate(todo_list) if not finished[idx]] for i,q in enumerate(queries) :
-2차원 배열 방향 answer=[[0]*n for _ in range(n)] #ex 시계방향 : 우,하,좌,상 dx=[0,1,0,-1] dy=[1,0,-1,0]