[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)

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

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

 

어제에 이어 리스트 + 반복문 뿌시기다. 이번 문제중 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")

태풍이 올라오고 있어 비와 바람이 많은 날씨이다.

우산을 들고 터벅터벅 걸어 카페에 도착했다.

아무고토 하고싶지않지만 그럴 수 없기에 시작했다..

 

개발 코드에 빠지지 않는 것 중 가장 비중이 큰거같다고 개인적으로 생각한다.

1차원을 넘어 다중으로 사용하게 되면 머리가 너무 아플것같다.

 

리스트 요소 추가

a = [1, 2, 3, 4]
a.append(5)
print(a) # [1, 2, 3, 4, 5]
a.insert(0, 6)
print(a) # [6, 1, 2, 3, 4, 5]
a.extend([10,11,12,13])
print(a) # [6, 1, 2, 3, 4, 5, 10, 11, 12, 13]

append = 리스트 맨뒤에 값을 추가하는것이다.

insert(x, y) = 인덱스 x 에 y 값을 추가하는것이다.

extend = 리스트 맨뒤에 더하는것이다. (더하기 연산자를 이용하여 리스트를 더할 수 도있다. 이는 비파괴적으로 동작한다.) 

위 코드 출력문을 확인해보라.

 

 

리스트 요소 제거

a = [1, 2, 3, 4]
del a[0]
print(a) # [2, 3, 4]
a.pop(0)
print(a) # [3, 4]
a.remove(4)
print(a) # [3]
a.clear()
print(a) # []

del [x] = 인덱스 x에 있는 요소를 지운다.

pop(x) = 인덱스 x에 있는 요소를 지운다.

remove(x) = 요소(x)를 제거한다.

clear = 모든 요소 제거

위 코드 출력문을 확인해보라.

 

 

요소 정렬

a = [100,1,40,20,5,101,42]
a.sort()
print(a) # [1, 5, 20, 40, 42, 100, 101]
a.sort(reverse=True)
print(a) # [101, 100, 42, 40, 20, 5, 1]

sort() = 요소들을 오름차순으로 정렬

sort(reverse=True) = 요소들을 내림차순으로 정렬

 

 

요소 존재 확인

a = [1,40,20,5]
print(40 in a) # True
print(4 in a) # False
print(4 not in a) # True

 

백준 1차원 배열 문제를 풀어보자

 

[10818]  최소, 최대

해결 포인트

리스트를 받고 소트로 정렬한 다음 첫 인덱스와 끝인덱스를 출력하면 된다.

답안

a = int(input())
b = list(map(int,input().split()))
b.sort()
print(b[0],b[-1])

 

 

[2562]  최댓값

해결 포인트

리스트를 만들어 append를 이용하여 9번 받고 max를 이용하여 최댓값 출력과 해당 인덱스를 알아내고 +1 시킨다.

이전 문제에선 최댓값을 소트하여 출력했지만 보다 간단한 max를 사용했다.

 

답안

a = []
for i in range(9):
    a.append(input())
print(max(a))
print(a.index(max(a))+1)

 

 

[3052] 나머지

해결 포인트

반복문을 사용하여 리스트 a에 10개의 자연수를 넣고 이와 동시에 리스트 b에는 42를 나눈값을 넣어준다.

여기까지는 수월하게 진행했다. 그러나... 두개의 리스트를 비교하는것에 좀 막혔다..

다중 포문으로 하나하나 비교하는것으로 짜봤지만 쉽지않았다...

리스트 비교 관련 함수를 찾던중 set() 이란것을 찾았고 이를 활용해 보았다.
set()함수는 리스트내 중복된 값을 찾아 없애고 나머지를 집합으로 만들어 준다.
set()을 적용해주고 len를 이용해 갯수를 카운트 해줬다.

 

답안

a = []
b = []
for i in range(10):
    a.append(input())
    b.append(int(a[i])%42)
print(len(set(b)))

 

[1546] 평균

 

해결 포인트

리스트 m을 받고 이중 최댓값을 변수 a에 저장한다.

반복문을 이용해 리스트 m 길이 만큼

i 값을 이용해 리스트 각 요소에 점수/a*100을 한 값을 넣어준다.

평균을 구하기 위해 변수 z에 더해준뒤
마지막 출력문때 리스트 길이만큼 나눠준다.

 

답안

n = int(input())
m = list(map(int,input().split()))
a = max(m)
z = 0
for i in range(n):
    m[i] = (m[i]/a)*100
    z = z+m[i]
print(z/len(m))

 

[8958] OX퀴즈

 

해결 포인트

진짜... 어려웠다.. 머리가 너무 복잡했다.
다중 포문을 사용한점.. 각 포문의 라인별 출력을 확인하여 로직을 파악하여 짰으며

점수를 더하고 초기화 하는 로직을 어느 라인에서 구동시킬지 많은 고민과 시간이 소요됬다.

첫 줄에 입력받는 수만큼 OX를 입력받게 포문을 사용하였다.
리스트에는 이중으로 데이터가 입력돠었으며
본 로직의 OX 구별 또한 [][] 이중 리스트를 사용하여 구분하였다.

이중 리스트인만큼 포문도 이중으로 사용하였다....

반복문이 아직 익숙지 않은 분들은 각 라인별로 print를 통해 데이터의 흐름을 파악해보는것도 좋다.

참고할만한 좋은 사이트 하나 소개한다.

Python Tutor: Learn Python, JavaScript, C, C++, and Java by visualizing code 

 

Python Tutor: Learn Python, JavaScript, C, C++, and Java by visualizing code

Learn Python, JavaScript, C, C++, and Java This coding tutor tool helps you learn Python, JavaScript, C, C++, and Java by visualizing code execution. You can use it to debug your homework assignments and as a supplement to online coding tutorials. Related

pythontutor.com

해당 사이트에 코드를 입력하면 스탭별로 로직 흐름을 알 수 있다.
오래걸리더라도 꼭해보길 권한다.

답안

a = int(input())
b = []
count = 0
sum = 0
for i in range(a):
    s = input()
    b.append(s)
for j in range(len(b)):
    for n in range(len(b[j])):
        if b[j][n] == "O":
            count += 1
            sum += count 
        elif b[j][n] == "X":
            count = 0
    count = 0
    print(sum)
    sum = 0

카페가 태풍땜에 정신이 없어 일찍닫는다...
얼른 마무리하고 집가야겠다!

반복문을 들어가기엔 하루 일정이 타이트하여

출력문 문제들을 풀어봤다.
역시나 쉬웠다..

정답률이 의심갈정도이다.

 

문제중 2588번을 좀 고민하게됬는데 한번 리뷰하도록 하겠다.

 

[2588] 곱셈

해결포인트

(3) 472 x 5

(4) 472 x 8

(5) 472 x 3
인데,,, 5 8 3 각각 어떻게 값을 줄지 생각보보았다. 이미 int(input())을 통해 숫자로 받은 상황이였다.

그렇담 수학적으로 계산하여 1의 자리 10의 자리 100의 자리 각각 구하는 수밖엔 없지만

너무나도 식이 복잡해질것이다.

그렇다면,,, 단순하게 문자로 생각하면 어떨까?

1은 숫자로 형변환 하고 2는 형변환 하지 않고 문자 그자체로 생각했다.

그렇다면 0,1,2에 각각 3,8,5가 들어가게되고 [0], [1], [2] 로 불러올수있다.

다른 표현법으로는 [-1]은 맨뒷자리를 나타내고 [-2]는 맨뒤에서 두번째이다. 이를통해

3 = [-3]

8 = [-2]

5 = [-1]

로 하여 생각해보자. 

답안

A = int(input())
B = input()
print(A*int(B[-1])) //B[2]
print(A*int(B[-2])) //B[1] 
print(A*int(B[-3])) //B[0]
print(A*int(B))

 

파이썬 조건문까지 학습했기 때문에 백준에 있는 조건문 문제를 풀어보았다.

 

[9498] 시험성적

답안

A = int(input())

if 90<=A<101:
    print("A")
elif 80<=A<90:
    print("B")
elif 70<=A<80:
    print("C")
elif 60<=A<70:
    print("D")
else:
    print("F")

이정도는 큰 어려움 없이 클리어~!

 

[2753] 윤년

 

답안

A = int(input())

if A%4 == 0 and (A%100 != 0 or A%400 == 0):
    print("1")
else:
    print("0")

이정도도 문제없이 클리어

 

[14681] 사분면그리기

답안

A = int(input())
B = int(input())

if A>0 and B>0:
    print("1")
elif A<0 and B>0:
    print("2")
elif A>0 and B<0:
    print("4")
elif A<0 and B<0:
    print("3")

해당 문제는 A와B 값을 따로 받았다.

문제 없이 클리어!

 

[2884] 알람시계

해결 포인트

입력된 시간보다 45분이 단축되어 표시해줘야하는데... 주어진 분이 45분 이상이면 시간은 줄어들지 않지만 45분 미만이면 시간은 -1되어 나타나야한다. 따라서 이를 가지고 IF문을 걸어줬으며 이에 따른 출력 분에는 +15 시켜줬다.

답안

H,M = map(int,input().split())

if 45<=M<=59:
    print(H,M-45)

elif 0<=M<45:
    if 0<H:
        print(H-1,M+15)
    elif 0==H:
        print(23,M+15)

 

[2525] 오븐 시계

해결 포인트

사용자로부터 시작 시간(시/분)과 소요시간(분)을 입력받아 시간을 더해 출력하는 문제이다.

시작 시간 = A, 시작 분 = B, 소요 분 = C이라 가정했을때 B와 C 합친 값이 60을 넘어가면 A에 영향을 주기때문에 이를 먼저 IF 걸어주었다.

추가로 A가 가질 정수 값은 0~24까지이다. 이를 고려하여 다시한먼 IF를 걸어줘야한다.
아래 답안을 참고하길 바란다.

답안

A,B = map(int,input().split())
C = int(input())
if (B + C) >= 60:
    if 0 <= ((B+C)/60 + A) <= 24:
        print("{} {}".format(int((B+C)/60 + A),(B+C)%60))
    else:
        print("{} {}".format(int((((B+C)/60 + A))-24),(B+C)%60))
else:
    print("{} {}".format(A,B+C))

 

[2480] 주사위 세개

해결 포인트

보기엔 비교적 간단해보이나 / 연산자를 이용하면 소숫점 까지 나타날것이다.
이를 해결하고자 int 형으로 변환하는 작업을 했지만 // 연산자를 사용하게 되면 정수로만 사용가능하다.

 

답안

A,B,C = map(int,input().split())
if A==B==C:
    print(10000+A*1000)
elif A==B or A==C or B==C:
    if A==B:
        print(1000+A*100)
    elif A==C:
        print(1000+A*100)
    elif B==C:
        print(1000+B*100)
elif A!=B!=C:
    if A > B and A > C:
        print(A*100)
    elif B > A and B> C:
        print(B*100)
    elif C > A and C > B:
        print(C*100)

 

+ Recent posts