gmlrmrtjd72
2022.03.09
@gmlrmrtjd72님이
알파벳의 출현
포스트를 좋아합니다.
jini_archive
2022.02.22
@jini_archive님이
수들의 합
포스트에 댓글을 남겼습니다.
jini_archive
2022.02.22
@jini_archive님이
수들의 합
포스트를 좋아합니다.
gkdnjsdls
2022.02.22
@gkdnjsdls님이 새 포스트를 작성했습니다.
수들의 합
""" N개의 수로 된 수열 A[1], A[2], …, A[N] 이 있습니다. 이 수열의 i번째 수부터 j번째 수까지의 합 A[i] + A[i+1] + … + A[j-1] + A[j]가 M이 되는 경우의 수를 출력 해 보세요. 첫째 줄에 N과 M이 주어진다. 다음줄에는 수열 A가 공백으로 분리되어 주어진다. """ # 1. N,M int로 입력 받음 # 2. A 리스트로 입력받음 # 3. i번째 수부터 j번째 수까지 더함 # 4. 더한게 M보다 크면 숫자를 1씩 증가 N,M=map(int,input("수열의 수 N과 수들의 합 M을 공백을 두고 입력하세요: ").split()) A=list(map(int,input("수열 공백두고  입력: ").split())) count=0 for i in range(N):     sum=0     for j in range(i,N):         sum+=A[j]         if sum==M:             count+=1 print(count)
gkdnjsdls
2022.02.21
@gkdnjsdls님이 새 포스트를 작성했습니다.
n번째 분수
""" 아래 그림과 같이, 배열에 다음과 같은 분수가 적혀있습니다. 그림처럼 지그재그 형태로 순서를 정할 경우, 1/1은 첫 번째, 1/2는 두 번째 분수가 됩니다. n번째 분수를 구하는 프로그램을 작성해보세요. """ # 규칙을 찾아야 함 input_num = int(input()) line = 0  #대각선 라인 max_num = 0  # 입력된 숫자(input_num 변수)의 라인에서 가장 큰 숫자 # while문에서 입력한 숫자가 어느 라인에 있는지, 그 라인에서 가장 큰 숫자가 뭔지 알아냄 while input_num > max_num:     line += 1       max_num += line gap = max_num - input_num if line % 2 == 0:  # 대각선이 짝수번째 일 때     top = line - gap  #분자     under = gap + 1  #분모 else :  # 대각선이 홀수번째 일 때     top = gap + 1  #분자     under = line - gap  #분모 print(f'{top}/{under}')
gkdnjsdls
2022.02.21
@gkdnjsdls님이 새 포스트를 작성했습니다.
피보나치수
""" 피보나치 수열은 수학에서 아래의 점화식으로 정의되는 수열입니다. 피보나치 수는 0 번째 숫자인 0과 첫 번째 숫자인 1로 시작하며, 두 번째 숫자는 0 번째 수와 첫 번째 수의 합인 0 + 1 = 1, 세 번째 숫자는 첫 번째 수와 두 번째 수의 합인 1 + 1 = 2 의 값을 가집니다. 숫자 n을 입력받아 피보나치 수열의 n번째 숫자를 출력하는 프로그램을 작성해보세요. 조건 1 : 입력받는 숫자 n은 2 이상의 자연수입니다. 조건 2 : n > 2인 피보나치 수에서, n번째 수 = (n - 2)번째 수 + (n - 1)번째 수 입니다. 조건 3 : 피보나치 수열을 나열하면 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... 입니다. """ def fib(num):     if num < 3:  # 2는 무조건 1이 나오게         return 1     return fib(num-1) + fib(num-2)   """num=4일때 return fib(3) + fib(2) -> fib(3) : return fib(2) + fib(1) -> fib(2)=1, fib(1)=1 따라서 1+1=2 -> fib(2) = 1 -> 따라서 num=4일때 최종 return값은 2+1 = 3 *fib(3)의 의미는 fib라는 함수에 3을 넣었을때 결괏값을 말함 """ n = int(input('2 이상의 자연수를 입력해주세요 : ')) print(fib(n))
gkdnjsdls
2022.02.20
@gkdnjsdls님이 새 포스트를 작성했습니다.
점수에 따른 등급과 평균
"""시험 점수를 입력받고, 그에 따른 등급과 총 평균을 계산하는 프로그램을 작성해주세요. 조건 1 : 시험 점수는 0에서 100점 사이입니다. 조건 2 : 점수당 등급은 다음과 같습니다. 90이상 100이하 : A 80이상 90미만 : B 70이상 80미만 : C 60이상 70미만 : D 60미만 : F 총 과목의 수를 입력해주세요: 3 점수를 입력해주세요: 100 #입력 해당 과목 등급: A 점수를 입력해주세요: 80 #입력 해당 과목 등급: B 점수를 입력해주세요: 60 #입력 해당 과목 등급: D 총 과목의 평균은 80점 입니다. """ # 1. 총 과목 수 입력 # 2. 과목 수만큼 점수 입력, 등급 출력, 점수들은 더함 # 3. 점수들의 평균을 냄 sub=int(input("총 과목의 수를 입력해 주세요: ")) sum=0 for i in range(sub):     sco=int(input("점수를 입력해주세요: "))     if 90<=int(sco)<=100:         print("해당 과목 등급: A")     elif 80<=sco<90:         print("해당 과목 등급: B")     elif 70<=sco<80:         print("해당 과목 등급: C")     elif 60<=sco<70:         print("해당 과목 등급: D")     elif sco<60:         print("해당 과목 등급: F")         sco_list.append(sco)     sum+=sco average=int(sum)//sub print("총 과목의 평균은 %d입니다"%average)
gkdnjsdls
2022.02.19
@gkdnjsdls님이 새 포스트를 작성했습니다.
알파벳의 출현
""" 알파벳 대/소문자로 된 문장이 주어질 때, 이 문장에서 가장 많이 사용된 알파벳이 무엇인지 알아내서 출력 해 보세요. 단, 대/소문자는 구분하지 않습니다. 가장 많이 사용 된 알파벳이 여러 개 존재하는 경우 모두 출력합니다. """ # for i in ~ 은 a b c d 들어가 있는 걸 그대로 for i in range ~ 는 0 1 2 3 순서만 s=input("알파펫으로 된 문장 입력: ").lower()   # 문자열 소문자로 변환, 조건이 대소문자를 구분하지 않는 것이기 때문에 대문자로 바꾸는 .upper()을 써도 됨 s_list=list(set(s))  # i의 개수를 셀 거니까 중복되면 안됨 cnt_list=[] for i in s_list:     cnt=s.count(i)   # i의 개수가 몇 개 인가?     cnt_list.append(cnt) a=[] for i in range(len(cnt_list)):     if cnt_list[i]==max(cnt_list):         a.append(s_list[i]) print(','.join(a))  # join() 함수는 리스트에 있는 element들을 하나의 문자열로 합칠 때 사용하는 함수
gkdnjsdls
2022.02.18
@gkdnjsdls님이 새 포스트를 작성했습니다.
블랙잭
""" 카지노에서 자주 플레이되는 블랙잭의 규칙은 카드의 합이 21이 넘지 않는 한도 내에서, 카드의 합을 가장 크게 만드는 게임이죠. 이와 유사하게, 코드메이트 버전의 블랙잭은 N개의 카드중 세장의 카드를 뽑아 X를 넘지 않으면서 X와 가장 가까운 수의 카드조합을 골라내는 규칙으로 진행됩니다. 첫째 줄에는 카드의 개수 N과 목표 값 X가 주어지며, 두번째 줄에는 카드에 쓰여있는 수가 입력으로 주어질 때 X에 가장 가까우면서 X를 넘지 않는 카드 세장의 합을 구해서 출력하세요. """ N,X=map(int,input("카드의 개수 N과 목표 값 X를 공백을 두고 입력하세요: ").split()) num_list=list(map(int,input("카드에 쓰여진 수를 공백을 두고 입력하세요: " ).split())) sum_list=[]   # 세 수의 합들을 저장할 리스트 for i in range(N):  # 카드 개수 만큼, 첫번째     for j in range(i+1,N):  # 두번째         for k in range(j+1,N):  # 세번째             sum=num_list[i]+num_list[j]+num_list[k]             if sum<X:                 sum_list.append(sum) print(max(sum_list))  # X를 넘지 않는 합들중 가장 큰 거 출력
gkdnjsdls
2022.02.16
@gkdnjsdls님이 새 포스트를 작성했습니다.
소인수 분해
""" 정수를 소수의 곱만으로 표현하는 것을 소인수분해라고 합니다. 소인수분해 프로그램을 작성해보세요. ⭐ 힌트 👉 소인수분해 과정 예시 (숫자 12를 소인수분해하는 과정) 1. 먼저, 숫자 12를 가장 작은 소수인 2로 나눕니다. 2. 12은 2로 나누어떨어지므로, 2는 12의 소인수입니다. → 2 3. 12을 2로 나눈 값 6을 다시 2로 나눕니다. 4. 6은 2로 나누어떨어지므로, 2는 6의 소인수입니다. → 2 5. 6을 2로 나눈 값 3을 다시 2로 나눕니다. 6. 3은 2로 나누어떨어지지 않습니다. 7. 3을 2 다음으로 작은 소수인 3으로 나눕니다. 8. 3은 3으로 나누어떨어지므로 3은 소인수입니다. →3 9. 3을 3으로 나눈 값은 1인데, 나누는 수 3이 나눠지는 수 1보다 크기 때문에 계산을 종료합니다 """ num=int(input("숫자를 입력해주세요: ")) while num!=1:     for i in range(2, num+1):         if num%i==0:             num//=i             print(i)             break
gkdnjsdls
2022.02.16
@gkdnjsdls님이 새 포스트를 작성했습니다.
거스름돈
""" 변수가 가지고 있는 동전은 총 N종류이고, 그 동전들을 사용해서 그 가치의 합을 X로 만들려고 합니다. 이 때 필요한 동전의 개수를 최소로 하는 프로그램을 만들어 보세요. 첫째 줄에는 N과 X가 주어지고, 둘째 줄 부터는 N개의 줄에 각각 동전의 가치가 오름차순으로 주어집니다. ( 단, 각 동전의 가치는 이전 동전의 가치의 배수 ) """ #어려워서 때려칠뻔. 하다가 내 머리로는 불가능하다고 판단, 다른 분들 걸 먼저 이해하고 고쳤음, 안 좋은 버릇...하긴 한 거에 의의를 두기로 # 1. N과 X를 입력받아줌 # 2. coin_value리스트를 만들어줌 # 3. N에 범위에서 가치를 입력받고 coin_value 리스트에 넣어줌 # 4. coin_value를 역순으로 재정렬-> 큰 수부터 나눠줘야 해서 # 5. 가치의 합을 가치로 나눔. 여기서 몫 만큼 동전을 쓰게 됨-> 동전의 개수를 증가시켜줌 # 6. 가치의 합은 나누고 남은 걸로 재정의 # 7. 동전 개수 출력 N,X=map(int,input("동전의 종류와 동전 가치의 합을 공백을 두고 입력하세요: ").split())  # map 함수를 처음봄. 리스트의 각 요소를 지정된 함수로 처리해준다고 함 coin_value=[] coin_sum=X for i in range(N):     value=int(input("동전의 가치를 입력한 동전의 종류 수 만큼 입력하세요 (단, 각 동전의 가치는 이전 동전의 가치의 배수): "))     coin_value.append(value)  # append() -> 가로 안에 있는 걸 리스트에 넣어줌 coin_value.reverse() coin_num=0 for value in coin_value:     coin_num+=coin_sum//value     coin_sum=coin_sum%value print(coin_num)
gkdnjsdls
2022.02.15
@gkdnjsdls님이 새 포스트를 작성했습니다.
올바른 괄호
""" 프로그래밍에서 괄호는 반드시 바르게 짝지어져 나와야만 합니다. 바르게 짝지어진다는 의미는, ' ( ' 문자로 열렸을 때 반드시 해당 짝으로 ' ) ' 가 나와야 한다는 의미입니다. '(', ')'로만 이루어진 문자열 S가 주어졌을 때, S가 바르게 짝지어진 괄호인지 아닌지 판정 하세요. """ # 1. '('는 +로 ')'를 -로 해서 결과가 0이면 True로 출력하게 하려고 함 # 2. ')'로 시작할 수도 있지 않음? 그 때 -되도록 조건 추가 # 3. '('로 끝나도 결과가 0이 될 수도 있잖음? ...다시 조건 추가 # 4. 그렇게 구멍 뚫린 곳을 틀어막아 주면서 코드 완성...헷갈림 S=input("'('과 ')'를 짝지어 입력하세요: ") i=0 num=0 for i in range(len(S)):     if S[i]==')' and S[0]!=')':         num-=1         elif S[i]=='(' and S[len(S)-1]!='(':         num+=1 if num==0:     print("True") else:     print("False")
gkdnjsdls
2022.02.15
@gkdnjsdls님이 새 포스트를 작성했습니다.
시간 변환
"""초 단위의 시간을 입력 받고, 일, 시, 분, 초로 시간을 계산하여 출력하는 코드를 작성해보세요. 사용하지 않는 단위는 출력하지 않습니다 (ex. '3601'초를 입력하면 '1시간 0분 1초'가 아닌 '1시간 1초'로 출력) 1일 = 86400초 1시간 = 3600초 1분 = 60초""" t=int(input("초 단위의 시간을 입력해주세요: ")) # t(시간)로 입력 받아줌 s=t  # 나중에 출력해줘야 할 내가 입력한 t가 필요하므로 s(초)로 넣어줌->처음 시간을 표현하는 게 t와 s가 됨 d=t//86400  # '//' =나눠서 몫을 출력-> d(일) t=t%86400   # 나머지를 t로 재정의 h=t//3600 t=t%3600 m=t//60 t=t%60 print(f'{s}초 =',end=' ')  #f-string이라고 업데이트 된 거라는데 f'{}' 로 하면 그냥 출력 가능하다고 함                            #end=''print문 끝에 end에서 정의한 것을 출력 후 다음 줄에 연이어 출력 if d!=0:  #사용하지 않는 단위를 출력하지 않기 위해서 '!=' 사용     print(f'{d}일',end=' ') if h!=0:     print(f'{h}시간',end=' ') if m!=0:     print(f'{m}분',end=' ') if t!=0:     print(f'{t}초',end=' ')
gkdnjsdls
2022.02.14
@gkdnjsdls님이 새 포스트를 작성했습니다.
색칠한 블록
"""문제 정육면체 모양의 블록을 쌓아 만든 W x L x H 크기의 직육면체가 있습니다. 직육면체의 겉면에만 색칠을 할 때, 2개의 면에만 색칠이 된 정육면체는 몇 개인지 구하는 프로그램을 작성해보세요. 조건 1 : 직육면체의 가로 W, 세로 L, 높이 H의 블록 개수를 입력받아야 합니다. 조건 2 : 그 직육면체에서 2개의 면만 색칠이 된 블록을 구해야합니다.""" """num=input("직육면체의 가로, 세로, 높이의 블록 개수를 공백을 두고 입력하세요: ").split()  #처음에 int(input) 으로 넣었더니 안되더라                                                                                      #split으로 나눠줘야 하는데 숫자는 그게 안될걸 이라고 컴공 친구가 그랬는데                                                                                      #맞는진 모르겠고 일단 안됨 W=int(num[0]) L=int(num[1]) H=int(num[2]) result=4*((W-2)+(L-2)+(H-2))   #처음에 그냥 print에다 식을 다 써버렸는데 나중에 헷갈리니 그렇게 쓰지 말랜다 print(result)""" #그냥 생각없이 그림으로 그려보다가 각 대각선에서 모서리 두개씩 빼면 되겠구나 했는데 1개 짜리도 있을 수 있잖아? #고려해주기로 함... num=input("직육면체의 가로, 세로, 높이의 블록 개수를 공백을 두고 입력하세요: ").split() W=int(num[0]) L=int(num[1]) H=int(num[2]) if W>=2 and L>=2 and H>=2:   #내 머리로는 이거면 되는데...다른 경우의 수가 있남...     result=4*((W-2)+(L-2)+(H-2))     print(result) else:     print(0)