[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 시켰다.

 

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

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

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

 

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

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

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

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

 

[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