[2292] 벌집

해결 포인트

시작(1)로부터 주위에 둘러싼 외벽의 방 갯수가 갖는 규칙을 찾아보면 쉽게 풀이 가능하다.

시작(1)은 방하나 그자제라고 생각하면된다.

답안

a = int(input())
if a == 1: # 처음 1은 방 한개 그 자체이다.
    print(a)
else: # 이후 외벽들은 6의 배수로 증가
    cnt = 1
    b = 1
    while b < a:
            b += cnt*6 # 벌집의 갯수를 파악하기위함
            cnt += 1 # 외벽의 갯수를 파악하기위함
    print(cnt)

a가 1인 경우 1개의 방 그 자체이기 때문에 시작으로 조건을 걸어준다.

이후 외벽 부턴 6의 배수로 증가한다는 점을 확인할 수 있다.
b에는 방의 갯수를 알기위해 6의 배수를 계속 더해 대입해주고

그때 마다 카운트를 통해 외벽의 갯수를 파악한다.

 

[2869] 달팽이는 올라가고 싶다

해결 포인트

로직 구현은 쉽게 가능할것이다...

그러나 문제는 시간초과이다.

for문 while문 반목문을 사용하면 안된다.

 로직을 간단하게 식으로 바꿔줘야한다.

답안

import sys
a,b,v = map(int,sys.stdin.readline().split())
cnt = (v-b)/(a-b) 
if cnt == int(cnt):
    print(int(cnt))
else:
    print(int(cnt)+1)

시간 제한이 걸려있기에 reline을 사용해줬다.

a = 올라감
b = 내려감

v = 총 높이

기본적으로는 v / a-b 를 떠오르겠지만 밤에 내려간다는것을 고려했을때 애초에 v(총 높이)에서 b(내려감)을 빼주고 시작하자.

나눗셈을 진행하면 소숫점이 나올것이다.

2.0 이면 2일 걸리는거지만 2.1은 3일 걸린다는것이다. int형으로 소숫점을 버리고 +1 시켰다.

 

오늘 카페가 너무 바빳다....

코딩할 시간이 없었다...

그래서 한문제다 ㅎㅎ

 

[1712] 손익분기점

해결 포인트

손익분기점에 대한 수학적 지식이 있으면 금방 해결할 수 있다.

손익분기점이 존재하지 않는경우는 -1을 출력하고 이외는

식을 통해 출력하면 된다.

답안

a,b,c = map(int,input().split())
if b>=c:
    print(-1)
else:
    print(int(a/(c-b))+1)

[5622] 다이얼

해결 포인트

나는 좀 멍청하게 풀었다....

답안 올리기가 너무 창피할 정도이다....

다른 사람들은 나보다 더 잘풀것이라 생각한다.

답안

a = input()
cnt = 0
for i in a:
    if i == 'A' or i == 'B' or i == 'C':
        cnt += 3
    elif i == 'D' or i == 'E' or i == 'F':
        cnt += 4
    elif i == 'G' or i == 'H' or i == 'I':
        cnt += 5
    elif i == 'J' or i == 'K' or i == 'L':
        cnt += 6
    elif i == 'M' or i == 'N' or i == 'O':
        cnt += 7
    elif i == 'P' or i == 'Q' or i == 'R' or i == 'S':
        cnt += 8
    elif i == 'T' or i == 'U' or i == 'V':
        cnt += 9
    elif i == 'W' or i == 'X' or i == 'Y' or i == 'Z':
        cnt += 10
print(cnt)

[2941] 크로아티아 알파벳

해결 포인트

변경 문자들을 한 변수에 전부 저장한다음 in 을 통해 테크하고 해당 인덱스를 특정 기호로 변경하여 len으로 길이를 구했다. 사용한 함수는 in, len, replace 3가지이다. 

답안

a = input()
b = ['c=','c-','dz=','d-','lj','nj','s=','z=']
for i in b:
    if i in a:
        a = a.replace(i,"1")
print(len(a))

[1316] 그룹 단어 체키

해결 포인트

n번째 인덱스와 n+1번째 인덱스를 비교하여 [ : : ] 및 in을 이용해 확인하였다. 

답안

a = int(input())
sum = a
for k in range(a):
    b = input()
    for i in range(len(b)-1):
        if b[i] == b[i+1]:
            pass
        elif b[i] in b[i+1:]:
            sum -= 1
            break
print(sum)

[1157] 단어 공부

해결 포인트

입력받자마자 upper을 통해 전부 대문자로 변경해준다.

set을 통해 중복값을 제거하고 list화 시킨다.

중복값을 가지고 입력받은 데이터와 비교하고 count를 통해 카운트한다.

이를가지고 비교하면 끝

답안

a = input().upper()
a_s = list(set(a))
x = 0
w = ''
if len(a) < 2:
    print(a)
else:
    for i in a_s:
        cnt = a.count(i)
        if x < cnt:
            x = cnt
            w = i
        elif x == cnt:
            w = '?'
print(w)

 

 

점점 어려워진다.

문제를 접할수록 아직 내가 문법이 부족하다는것을 많이 느낀다.

 

[1065] 한수

해결 포인트

한자릿수 두자릿수 모든 숫자는 등차수열이다.

이를 먼저 조건을 건다음 인덱스 0,1 과 2,3을 비교하여 카운트 해보자

답안

import sys
x = int(sys.stdin.readline())
cnt = 0
for i in range(1,x+1):
    if i < 100:
        cnt += 1
    else:
        b = list(map(int,str(i)))
        if b[1] - b[0] == b[2] - b[1]:
            cnt += 1
print(cnt)

1 ~ 입력받은수까지가 문제에서 요구하는 범위이다.

각 요소를 숫자형으로 변경하여 리스트를 만들어 비교하면 된다.

 

[11654] 아스키 코드

해결 포인트

ord()를 사용하면 쉽게 풀이 가능하다.

답안

print(ord(input()))

[11720] 숫자의 합

해결 포인트

그냥 쉽다....

답안

a = int(input())
b = input()
sum = 0
for i in b:
    sum += int(i)
print(sum)

 

[10809] 알파벳 찾기

해결 포인트

변수 두개

하나는 입력받고

하나는 알파벳을 저장하여 a in b 를 이용하여 찾고 해당 인덱스를 출력하면 된다.

답안

from operator import index
a = input()
b = 'abcdefghijklmnopqrstuvwxyz'
for i in b:
    if i not in a:
        print(-1,end=" ")
    else:
        print(a.index(i),end=" ")

 

[2675] 문자열 반복

해결 포인트

공백으로 구분되어 입력받은뒤 입력받은 수 만큼 인덱스 하나하나 반복하여 출력하면 된다.

답안

a = int(input())
sum = ""
for i in range(a):
    b, c = input().split()
    for j in range(len(c)):
        sum += c[j]*int(b)
    print(sum)
    sum = ""

 

[1152] 단어의 개수

해결 포인트

공백으로 단어를 입력받고 len()을 이용하면 끝이다.

답안

a = input().split()
print(len(a))

 

[2908] 상수

해결 포인트

[::-1] 을 이용하면 문자열을 반대로 구성할 수 있다.

답안

a,b = input().split()
a = a[::-1]
b = b[::-1]
if a<b:
    print(b)
else:
    print(a)

 

이제 어느정도 감이 잡혔다.

기초적인 문법들..

매번 문제를 풀어볼떄마다 코드를 다 지우고 처음부터 작성하니 금방 익숙해진것같다.

 

이제 다음 부터는 함수를 공부하려고 한다.

[15552]  빠른 A+B

그렇다 뭔지 모르겠지만 시키는대로 readline을 사용해보자

해결 포인트

변수 b는 split으로 구분으려 str로 받았다.

덧셈할때는 int형으로 변환하여 해줬다.

map으로 두개를 받아서 해도된다.
뭐 아직 코린이니까... 어떤방식으로든 풀면 된다고 생각한다.

답안

import sys
a = int(sys.stdin.readline())
for i in range(a):
    b = sys.stdin.readline().split()
    print(int(b[0])+int(b[1]))

 

[11021]  A+B - 7

해결 포인트

이 문제는 이전 문제와 매우 흡사하다.

이번에는 map을 이용하여 값을 받았다.

답안

t = int(sys.stdin.readline())
for i in range(t):
    a, b = map(int, sys.stdin.readline().split())
    print("Case #{}: {}".format(i+1,a+b))

[11022]  A+B - 8

해결 포인트

이전 문제와 거의 똑같다 출력문만 조금 바뀌었다.

답안

import sys
t = int(sys.stdin.readline())
for i in range(t):
    a,b = map(int,sys.stdin.readline().split())
    print("Case #{}: {} + {} = {}".format(i+1,a,b,a+b))

 

[2438]  별 찍기 - 1

해결 포인트

코린이는 어려울 것이다...

for문의 로직을 정확하게 파악한다면 비교적 손쉽게 가능하다.

답안

import sys
L = int(sys.stdin.readline())
for i in range(L):
    print("*"*(i+1))

 

[2439]  별 찍기 - 2

해결 포인트

이전 문제와 비슷하지만 더 어렵다.

공백을 출력하는것을 고려해보라

답안

import sys
L = int(sys.stdin.readline())
for i in range(L):
    print(" "*(L-(i+1)) + "*"*(i+1))

 

[10871]  X보다 작은 수

해결 포인트

쏘 이지..

답안

import sys
n,x = map(int, sys.stdin.readline().split())
a = sys.stdin.readline().split()
for i in range(n):
    if int(a[i]) < x:
        print(a[i])

 

[10952]  A+B - 5

해결 포인트

입력받는 값이 0 0 일때는 break 해야한다.

이점 고려하여 풀어보자

답안

import sys
while True:
    a,b = map(int, sys.stdin.readline().split())
    if a==0 and b==0:
        break
    else:
        print(a+b)

10951 A+B - 4

 

[10951]  A+B - 4

해결 포인트

try를 사용해보자.

답안

from ast import Try
import sys
while True:
    try:
        a,b = map(int, sys.stdin.readline().split())
        print(a+b)
    except:
        break

[1110]  더하기 사이클

해결 포인트

어려웠다...

한줄 한줄 구현하는것을 권한다.

우선적으로 고려해야할 점은 입력받은 값이 한자리인지 두자리인지 이다.

본인은 숫자형이 아닌 문자형으로 인식하여 중간중간 숫자형으로 변환하여 코드를 짰다.

방법이야 여러가지겠지만 일단 답만 내면 장땡아니겠는가...

답안

a = input()
count = 0
if len(a) < 2:
    a = a + str(0)
    b = a
else:
    b = a 
while True:
    try:
        sum = str(int(a[-1])+int(a[-2]))
        a = a[-1] + sum[-1]
        count += 1
        if a == b:
            print(count)
            break
    except:
        break

 

태풍이 가고 날씨가 너무 화창하다.

바람은 많이 불지만 아직 햇빛은 너무나 덥다~

 

어제에 이어 리스트 + 반복문 뿌시기다. 이번 문제중 4344번이 진짜 너무나도 오래걸렸다...

벌써부터 막히면 안되는데..

[4344] 평균은 넘겠지

해결 포인트

테스트 케이스를 받아 그 수만큼 점수를 받아야한다.

그리고 받은 데이터 인덱스 0은 학생의 수 이며 이후는 각 학생의 점수를 받는다.

그렇게 첫번째 리스트가 완성되면 인덱스 0(학생수) 를 제외하고 더한값을 변수에 저장하고 인덱스 0(학생수)로 나누어 평균값을 변수에 저장한다.

평균값과 각 학생 점수를 비교하여 카운트하여 평균을 넘는 학생수를 구하고 전체 학생수를 이용해 비율을 구한다.

답안

a = int(input())
b = []
result = []
for i in range(a):
    b.append(list(map(int, input().split())))
    sum = 0
    avg = 0
    count = 0
    for j in range(len(b[i])-1):
        sum = sum + b[i][j+1]
        avg = sum / b[i][0]
    for n in range(len(b[i])-1):
        if avg < b[i][n+1]:
            count = count + 1
    result.append(count/b[i][0]*100)
for m in range(len(result)):
    print('%.3f'%(result[m])+'%')

[2739] 구구단

해결 포인트

for문을 사용하면 0부터 시작한다는것을 인지하고 작성해보자

답안

a = int(input())
for i in range(9):
    print("{} * {} = {}".format(a, i+1, a*(1+i)))

[10950]  A+B -3

해결 포인트

처음에 입력받는 수 만큼 이후 값들을 입력받아야한다.

답안 

a = int(input())
for i in range(a):
    x,y = input().split()
    print(int(x)+int(y))

[8393] 합

해결 포인트

이전 구구단 문제와 같이 for문 사용시 0부터 시작한다는 점을 고려하여 작성하면 된다.

답안

a = int(input())
sum = 0
for i in range(a):
    sum = sum + (i+1)
print(sum)

[25304} 영수증

해결 포인트

두번째로 받는 물건 종류 수대로 아래 각 물건 가격과 개수를 받고

받은 가격과 개수를 곱해 변수에 저장한다.

각각의 물건 총 값을 더해 기존 입력 받은 총금액과 일치하는지 알아보면된다.

답안

sum = int(input())
sum2 = 0
a = int(input())
for i in range(a):
    x,y = input().split()
    sum2 = sum2 + (int(x)*int(y))
if sum == sum2:
    print("Yes")
else:
    print("No")

+ Recent posts