22.10.08 TIL☀️

조배·2022년 10월 8일
0

TIL

목록 보기
14/30
post-thumbnail


내 동생 치요🦁
벌써 보고싶다..🥲

코드업 파이썬 100제 정리😀

6개월전쯤인가 파이썬을 배우기 시작하고, 재밌게 배우고 싶어서 코드업의 '파이썬 100제'를 풀며 파이썬을 익혔는데 그 때 정리하던 글이 남아있어서 도움이 될까해서 정리해서 올려본다.

문제 링크 및 문제 내용

문제집 / Python 기초 100제 (codeup.kr)

출력변환

  • print로 출력시 ‘, ”, \ 같은 문자를 출력시 에러가 발생할 수 있는데 \’ 이런식으로 방지 할수 있다. → \n을 출력창에 보여주고싶을때는 \n
  • print(?, ?, sep = ‘:’)를 사용하면 콜론 ‘:’ 기호를 사이에 두고 값을 출력한다.
  • 진수 변환시(10→16진법, 8진법)
    a = int(input())
    print('%x'% a)
    #a에 저장되어있는 값을 16진수(hexadecimal) 소문자 형태 문자열로 출력
    #%o로 출력하면 8진수(octal) 문자열로 출력된다.

값변환

  • 16진수로 → 8진수(octal)
    a = input()
    n = int(a, 16)      #입력된 a를 16진수로 인식해 변수 n에 저장
    print('%o' % n)  #n에 저장되어있는 값을 8진수(octal) 형태 문자열로 출력
  • 영문자 → 10진수
    # ord()는 어떤 문자의 순서 위치 값을 의미
    num = ord(input())
    print(num)
  • 10진수 → 유니코드 문자
    num = int(input())
    #chr()는 정수값 -> 문자
    #ord()는 문자-> 정수값  정반대의 역할을 함
    print(chr(num))
  • 문자→ 다음 문자 ex) A→B , 1→2
    # 입력값을 위치 값으로 전환
    num = ord(input())
    # 위치값의 문자 출력
    print(chr(num+1))
  • 소숫점 자리 변환 ex) 3.141592 , 3.14
a = float(input())
# format()을 통해 소숫점 아래 3번째 자리에서 반올림한 값을 출력시켜줌
print(format(a,".2f"))

논리연산

  • 정수 참/거짓 구분

n = int(input())
#bool()는 0이나오면 False 그외의 수라면 True를 리턴한다.
print(bool(n))

비트 단위 논리연산

비트 단위 연산자

~(bitwise not)
&(bitwise and)
|(bitwise or)
^(bitwise xor)
<<(bitwise left shift)
(>>)(bitwise right shift)


a, b = map(int, input().split())
#정수값을 받아와서 비트단위 연산자를 사용하면 비트단위로 계산후에 정수값으로 출력해주는듯
print(a|b)

3항 연산

# 3항 연산의 예 - 두 수 중 큰 값 출력하기
a,b = map(int, input().split())
# a>=b의가 참이면 a를 리턴하고, 거짓이면 else의 b를 리턴한다.
c = (a if a>=b else b)
print(c)
# 3항 연산의 예- 세개의 수 중 작은 값 출력하기
a, b, c = map(int, input().split())
# 위에 값과 다르지 않았다. 먼저 두수를 비교한 후 나머지 수와 비교한다.
d = (a if a<b else b) if ((a if a<b else b)<c) else c
print(d)

종합 문제

6081번 16진수 구구단 출력

문제 설명

16진수(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F)를 배운
영일이는 16진수끼리 곱하는 16진수 구구단?에 대해서 궁금해졌다.

A, B, C, D, E, F 중 하나가 입력될 때,
1부터 F까지 곱한 16진수 구구단의 내용을 출력해보자.
(단, A ~ F 까지만 입력된다.)

# 16진수 구구단 출력
a = input()
# int(변수, 16(진수)) 변수의 값을 원하는 진수의 값으로 변환
a = int(a,16)
# 16진수의 구구단은 16번이므로 16번 반복해주며 출력
for i in range(1, 16):
	# sep = ''을 해주면 여백을 삭제해줌.
    # print('%X'%a, '*%X'%i, '=%X'%(a*i),sep = '')
    # format()을 활용하는 방법도 있음.
    print(format('{0}*{1}={2}').format('%X'%a, '%X'%i, '%X'%(a*i)))

6082번 369게임

문제 설명

친구들과 함께 3 6 9 게임을 하던 영일이는 잦은 실수 때문에 계속해서 벌칙을 받게 되었다.
3 6 9 게임의 왕이 되기 위한 369 마스터 프로그램을 작성해 보자.

** 3 6 9 게임은?
여러 사람이 순서를 정한 후, 순서대로 수를 부르는 게임이다.
만약 3, 6, 9 가 들어간 수를 자신이 불러야 하는 상황이라면, 수를 부르는 대신 "박수(X)" 를 쳐야 한다.
33과 같이 3,6,9가 두 번 들어간 수 일때, "짝짝"과 같이 박수를 두 번 치는 형태도 있다.

# 3 6 9 게임의 왕이되자
a = int(input())
# 인력 값까지 반복
for i in range(1,a+1):
    # 해당 숫자에 10을 나눴을때의 나머지값으로 3,6,9의 경우를 찾을 수 있다.
    if i%10 == 3 or i%10 == 6 or i%10 == 9:
        print('X', end =' ')
    # 그외의 경우에는 숫자 출력
    else:
        print(i, end =' ')

6083번 빛 섞어 색 만들기

문제 설명

빨강(red), 초록(green), 파랑(blue) 빛을 섞어 여러 가지 다른 색 빛을 만들어 내려고 한다.

빨강(r), 초록(g), 파랑(b) 각 빛의 가짓수가 주어질 때,
주어진 rgb 빛들을 섞어 만들 수 있는 모든 경우의 조합(r g b)과 만들 수 있는 색의 가짓 수를 계산해보자.

모니터, 스마트폰과 같은 디스플레이에서 각 픽셀의 색을 만들어내기 위해서 r, g, b 색을 조합할 수 있다.
픽셀(pixel)은 그림(picture)을 구성하는 셀(cell)에서 이름이 만들어졌다.

# 6083번 빛 섞어 색 만들기
r, g, b = map(int, input().split())
# 카운트 값
cnt = 0
# r,g,b 값을 3중 반복문 처리
for i in range(r):
    for j in range(g):
        for k in range(b):
            cnt += 1
            print(i, j, k)
print(cnt)

6084번 소리 파일 저장용량 계산하기

문제 설명

소리가 컴퓨터에 저장될 때에는 디지털 데이터화 되어 저장된다.

마이크를 통해 1초에 적게는 수십 번, 많게는 수만 번 소리의 강약을 체크하고,
한 번씩 체크할 때 마다 그 값을 정수값으로 바꾸어 저장하는 방식으로 소리를 파일로 저장할 수 있다.

값을 저장할 때에는 비트를 사용하는 정도에 따라 세세한 녹음 정도를 결정할 수 있고,
좌우(스테레오) 채널로 저장하면 2배… 5.1채널이면 6배의 저장공간이 필요하고,
녹음 시간이 길면 그 만큼 더 많은 저장공간이 필요하다.

1초 동안 마이크로 소리강약을 체크하는 횟수를 h
(헤르쯔, Hz 는 1초에 몇 번? 체크하는가를 의미한다.)

한 번 체크한 값을 저장할 때 사용하는 비트수를 b
(2비트를 사용하면 0 또는 1 두 가지, 16비트를 사용하면 65536가지..)

좌우 등 소리를 저장할 트랙 개수인 채널 개수를 c
(모노는 1개, 스테레오는 2개의 트랙으로 저장함을 의미한다.)

녹음할 시간(초) s가 주어질 때,

필요한 저장 용량을 계산하는 프로그램을 작성해보자.

실제로, 일반적인 CD 음질(44.1KHz, 16bit, 스테레오)로 1초 동안 저장하려면
44100 16 2 1 bit의 저장공간이 필요한데,
44100
1621/8/1024/1024 로 계산하면 약 0.168 MB 정도가 필요하다.

이렇게 녹음하는 방식을 PCM(Pulse Code Modulation) 방법이라고 하는데,
압축하지 않은 순수한(raw) 소리 데이터 파일은 대표적으로 *.wav 가 있다.

**
8 bit(비트) = 1byte(바이트) # 8bit=1Byte
1024 Byte(210 byte) = 1KB(킬로 바이트) # 1024Byte=1KB
1024 KB(210 KB) = 1MB(메가 바이트)
1024 MB(210 MB) = 1GB(기가 바이트)
1024 GB(210 GB) = 1TB(테라 바이트)

# 입력 값
h, b, c, s = map(int, input().split())
# 저장된 용량을 8로 먼저 나눠주면 비트-> 바이트 이후 1024을 연달아 나누면 B->KB->MB
result = h*b*c*s/8/1024/1024
# format함수로 소숫점 첫번째 자리로 반올림해줬다.
print(format(result,".1f"),'MB')

6086번 거기까지! 이제 그만~

문제 설명

1, 2, 3 ... 을 순서대로 계속 더해 합을 만드는데,
그 합이 입력한 정수보다 작을 동안만 계속 더하는 프로그램을 작성해보자.

즉, 1부터 n까지 정수를 하나씩 더해 합을 만드는데,
어디까지 더해야 입력한 수보다 같거나 커지는지 알아보고자 하는 문제이다.

하지만, 이번에는 그 때 까지의 합을 출력해야 한다.

예를 들어, 57을 입력하면
1+2+3+...+8+9+10=55에서 그 다음 수인 11을 더해 66이 될 때,
그 값 66이 출력되어야 한다.

# 거기까지! 이제 그만~
a = int(input())
result = 0
save = 1
while result<a:
    result += save
    save += 1
print(result)

6091번 함께 문제 푸는날

문제 설명

온라인 채점시스템에는 초등학생, 중고등학생, 대학생, 대학원생,
일반인, 군인, 프로그래머, 탑코더 등 아주 많은 사람들이 들어와 문제를 풀고 있는데,

실시간 채점 정보는 메뉴의 채점기록(Judge Status)을 통해 살펴볼 수 있다.

자! 여기서...잠깐..
같은 날 동시에 가입한 3명의 사람들이 온라인 채점시스템에 들어와 문제를 푸는 날짜가
매우 규칙적이라고 할 때, 다시 모두 함께 문제를 풀게 되는 그날은 언제일까?

예를 들어 3명이 같은 날 가입/등업하고, 각각 3일마다, 7일마다, 9일마다
한 번씩 들어온다면, 처음 가입하고 63일 만에 다시 3명이 함께 문제를 풀게 된다.

갑자기 힌트?
왠지 어려워 보이지 않는가?
수학에서 배운 최소공배수를 생각한 사람들도 있을 것이다. 하지만, 정보에서 배우고 경험하는
정보과학의 세상은 때때로 컴퓨터의 힘을 빌려 간단한 방법으로 해결할 수 있게 한다.

아래의 코드를 읽고 이해한 후 도전해 보자.
day는 날 수, a/b/c는 방문 주기이다.

# 함께 문제 푸는 날
# 입력값
a, b, c = map(int, input().split())
day = 1
# 반복문
while True:
    # 세수의 최소 공배수가 결과값일때 break
    if day%a == 0 and day%b == 0 and day%c == 0:
        break
    day +=1
# 이런 식으로도 가능하다.
# while day%a != 0 or day%b != 0 or day%c != 0:
#     day +=1
print(day)

6092번 이상한 출석 번호 부르기1

문제 설명

정보 선생님은 수업을 시작하기 전에 이상한 출석을 부른다.

선생님은 출석부를 보고 번호를 부르는데,
학생들의 얼굴과 이름을 빨리 익히기 위해 번호를 무작위(랜덤)으로 부른다.

그리고 얼굴과 이름이 잘 기억되지 않는 학생들은 번호를 여러 번 불러
이름과 얼굴을 빨리 익히려고 하는 것이다.

출석 번호를 n번 무작위로 불렀을 때, 각 번호(1 ~ 23)가 불린 횟수를 각각 출력해보자.

n = int(input())
li = list(map(int, input().split()))
# 결과값 딕셔너리
result = {}
# 23번까지 딕셔너리 생성
for i in range(1,24):
    result[i] = 0
# 중복된 숫자가 있다면 카운트해줌
for lis in li:
    if lis in result:
        result[lis] +=1
# 밸류값만 출력
for i in range(1,24):
    print(result[i], end = ' ')

6093번 이상한 출석 번호 부르기2

문제 설명

정보 선생님은 수업을 시작하기 전에 이상한 출석을 부른다.

학생들의 얼굴과 이름을 빨리 익히기 위해 번호를 무작위(랜덤)으로 부르는데,
영일이는 선생님이 부른 번호들을 기억하고 있다가 거꾸로 불러보는 것을 해보고 싶어졌다.

출석 번호를 n번 무작위로 불렀을 때, 부른 번호를 거꾸로 출력해 보자.

n = int(input())
num_li = list(map(int, input().split()))
# reversed()를 활용해서 거꾸로 출력해줬다.
for i in reversed(num_li):
    print(i, end=' ')
# 이런식으로도 가능하다.    
#for i in range(n-1, -1, -1) :
#   print(a[i], end=' ')


# 참고
# 번호를 부른 순서를 리스트에 순서대로 기록해 두었다가, 기록한 값들을 거꾸로 출력하면 된다.
# range(시작, 끝, 증감) #시작 수는 포함, 끝 수는 포함하지 않음. [시작, 끝)
# range(n-1, -1, -1) #n-1, n-2, ..., 3, 2, 1, 0

6094번 이상한 출석 번호 부르기3

문제 설명

정보 선생님은 오늘도 이상한 출석을 부른다.

영일이는 오늘도 다른 생각을 해보았다.
출석 번호를 다 부르지는 않은 것 같은데... 가장 빠른 번호가 뭐였지?

출석 번호를 n번 무작위로 불렀을 때, 가장 빠른 번호를 출력해 보자.

단,
첫 번째 번호와 마지막 번호가 몇 번인지는 아무도 모른다.
음수(-) 번호, 0번 번호도 있을 수 있다.

참고
리스트에 출석 번호를 기록해 두었다가, 그 중에서 가장 작은 값을 찾아내면 된다.
그런데, 가장 작은 값은 어떻게 어떤 것과 비교하고, 어떻게 찾아야 할까?

n = int(input())
num_li = list(map(int, input().split()))
# min()를 이용해 간단하게 구한 방법
# print(min(num_li))

# 변수 하나를 생성해서 반복문을 통해 구한 방법
min_num = 10000

for i in num_li:
    # 리스트의 값이 변수의 값보다 작으면 업데이트
    if min_num>i:
        min_num = i
print(min_num)

6095번 바둑판에 흰 돌 놓기

문제 설명

기숙사 생활을 하는 학교에서 어떤 금요일(전원 귀가일)에는 모두 집으로 귀가를 한다.

오랜만에 집에 간 영일이는 아버지와 함께 두던 매우 큰 오목에 대해서 생각해 보다가
"바둑판에 돌을 올린 것을 프로그래밍 할 수 있을까?"하고 생각하였다.

바둑판(19 * 19)에 n개의 흰 돌을 놓는다고 할 때,
n개의 흰 돌이 놓인 위치를 출력하는 프로그램을 작성해보자.

#바둑판 흰돌 놓기
n = int(input())
# d=[]
# for i in range(20) : 
#   d.append([])
#   for j in range(20) :  
#     d[i].append(0)

# 위의 식을 한줄로 단축시키는 방법 리스트 컴프리헨션
d = [[0 for j in range(20)] for i in range(20)]

for i in range(n):
    x, y = input().split()
    d[int(x)][int(y)] = 1

for i in range(1, 20):
    for j in range(1,20):
        print(d[i][j],end=' ')
    print()

6097번 설탕과자 뽑기

문제 설명

부모님과 함께 놀러간 영일이는
설탕과자(설탕을 녹여 물고기 등의 모양을 만든 것) 뽑기를 보게 되었다.

길이가 다른 몇 개의 막대를 바둑판과 같은 격자판에 놓는데,

막대에 있는 설탕과자 이름 아래에 있는 번호를 뽑으면 설탕과자를 가져가는 게임이었다.
(잉어, 붕어, 용 등 여러 가지가 적혀있다.)

격자판의 세로(h), 가로(w), 막대의 개수(n), 각 막대의 길이(l),
막대를 놓는 방향(d:가로는 0, 세로는 1)과
막대를 놓는 막대의 가장 왼쪽 또는 위쪽의 위치(x, y)가 주어질 때,

격자판을 채운 막대의 모양을 출력하는 프로그램을 만들어보자.

# 설탕과자 뽑기
h, w = map(int,input().split())
n = int(input())
# l,d,x,y 를 저장할 리스트
li = []
# 리스트컴프리헨션으로 주어진 값에 해당되는 격자판 생성
result = [[0 for j in range(w)] for i in range(h)]
# l(길이), d(가로는 0, 세로는 1), x(x축 좌표),y(y축 좌표) 저장
for i in range(n):
    l, d, x, y = map(int,input().split())
    li.append((l, d, x, y))
# l,d,x,y를 저장한 리스트를 반복하며 세로, 가로일 상황을 나누어 좌표찍어줌.
for l,d,x,y in li:
    if d == 0:
        for len in range(l):
            result[x-1][y-1+len] = 1
    else:
        for len in range(l):
            result[x-1+len][y-1] = 1
# 출력
for i in range(h):
    for j in range(w):
        print(result[i][j], end = ' ')
    print()

오늘의 추천곡 🎶


너드 커넥션 '좋은 밤, 좋은 꿈' 🎵
이 곡은 라이브 영상으로 가져와봤다. 그냥 들어보세요..👍

내일의 나에게🥲

  • BFS 난이도 중까지
profile
깃허브로 이전했습니다 -> https://chobae.github.io/

0개의 댓글