2024. 12. 1. 16:58ㆍAlgorithms/백준알고리즘 연습
25083번
아래 예제와 같이 새싹을 출력하시오.
입력
입력은 없다.
출력
새싹을 출력한다.
예제 입력 1 복사
예제 출력 1 복사
,r'"7
r`-_ ,' ,/
\. ". L_r'
`~\/
|
|
print(' ,r\'"7')
print("r`-_ ,' ,/")
print(" \. \". L_r'")
print(" `~\/")
print(" |")
print(" |")
파이썬 문법
1. 문자내 작은따옴표 표현하고 싶으면 큰따옴표로 감싸기(vice versa)
2. escape code
코드 | 설명 |
\n | 문자열 안에서 줄을 바꿀 때 사용 |
\t | 문자열 사이에 탭 간격을 줄 때 사용 |
\\ | 문자 \를 그대로 표현할 때 사용 |
\' | 작은따옴표(')를 그대로 표현할 때 사용 |
\" | 큰따옴표(")를 그대로 표현할 때 사용 |
3003번
리스트끼리 빼기
배운 개념 : zip
a = [1, 2, 3]
b = [4, 5, 6]
print([ai - bi for ai, bi in zip(a, b)])
# 출력
[-3, -3, -3]
반복문을 펼치면
for ai, bi in zip(a, b):
print(ai, bi, ai - bi)
# 출력
1 4 -3
2 5 -3
3 6 -3
a b를 하나의 패키지 처럼 묶어서 반복해서 데려옴
저걸 배워서 초기 답안은
b = list(map(int,input().split()))
a = [1,1,2,2,2,8]
print([ai - bi for ai, bi in zip(a, b)])
이렇게 적음
근데 틀림. 어떤 부분에서 틀리는지 모르겠음
for i in range(6):
print(a[i] - b[i], end=' ')
프린트 부분이 틀림
공백도 무시함
zip 왜 안돼지...?
백준 2444번
초기 답안
n= int(input())
for i in range(1,2*n):
if i <= 5:
for j in range(5-i):
print(" ",end="")
for j in range(2*i-1):
print("*",end="")
print()
else:
for j in range(i-5):
print(" ",end="")
for j in range((10-i)*2-1):
print("*",end="")
print()
틀렸다고 함
정답
n = int(input())
for i in range(1, n):
print(' '*(n-i) + '*'*(2*i-1))
for i in range(n, 0, -1):
print(' '*(n-i) + '*'*(2*i-1))
1~4번까지는 늘어나는 수
5번~ 9번라인까지는 줄어어드는 수
몇개의 갯수가 늘어나고 줄어들어야 하는지 결정
팰린드롬인지 확인하기 성공
1 초 | 256 MB | 95138 | 57788 | 48940 | 60.920% |
문제
알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.
팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다.
level, noon은 팰린드롬이고, baekjoon, online, judge는 팰린드롬이 아니다.
입력
첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.
출력
첫째 줄에 팰린드롬이면 1, 아니면 0을 출력한다.
예제 입력 1 복사
level
예제 출력 1 복사
1
예제 입력 2 복사
baekjoon
예제 출력 2 복사
0
처음 코드
n = input()
reverse_str = ''.join(reversed(n))
if n = reverse_str:
print(1)
else :
print (0)
코드 변경
n = input()
reverse_str = ''.join(reversed(n))
if n == reverse_str:
print(1)
else :
print (0)
syntax error 잡고
= 을 ==로 변경
내장함수 reversed = 뒤집을 문자열을 괄호안에 넣는다 --> 근데 interator(순서대로 다음 값을 리턴할 수 있는 객체) 를 반환하기 때문에 ' '.join을 이용하여 문자열로 변환해주는 과정이 필요
1157번
단어 공부
2 초 | 128 MB | 316558 | 127400 | 100140 | 39.905% |
문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
예제 입력 1 복사
Mississipi
예제 출력 1 복사
?
예제 입력 2 복사
zZa
예제 출력 2 복사
Z
예제 입력 3 복사
z
예제 출력 3 복사
Z
예제 입력 4 복사
baaa
예제 출력 4 복사
A
초기 코드
b에 max 값을 주는 i 값을 프린트 하는 방법을 알아야 하는데 , 이걸 못하겠음
글자의 값이 중복일때 ? 를 주어야하는데 이것도 구현할줄 모름
a = list(int(input())
b = []
for i in range (len(a)):
count(a[i]) = b
print(b.upper())
정답 코드
word = input().upper()
word_list = list(set(word))
cnt = []
for i in word_list: #중복제거한글자만큼반복할건데
count = word.count #원래있던단어의숫자를카운트할거야
cnt.append(count(i)) #한개씩카운트한값을리스트에 넣어줘
if cnt.count(max(cnt)) > 1:
print("?")
else:
print(word_list[(cnt.index(max(cnt)))]) #맥스값의index를뽑아서해당하는리스트의글자를가져와줘
1. 문자 갯수의 count는 한번씩만 있으면 되니 리스트의 중복을 없애는 세는 것의 반복은 특정 문자만 하도록 바꿔주기
2. 리스트에 카운트 숫자를 더해주려면 append 를 써야함
3. 중복되는게 많으면 = max 값이 1보다 크면 = ?를 출력함
4. max 값에 맞는 문자를 데려오는 것은 index를 활용하면 됨
2941번
크로아티아 알파벳 다국어
1 초 | 128 MB | 197991 | 88427 | 74336 | 44.546% |
문제
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.
크로아티아 알파벳변경č | c= |
ć | c- |
dž | dz= |
đ | d- |
lj | lj |
nj | nj |
š | s= |
ž | z= |
예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.
입력
첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.
단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.
출력
입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
예제 입력 1 복사
ljes=njak
예제 출력 1 복사
6
예제 입력 2 복사
ddz=z=
예제 출력 2 복사
3
예제 입력 3 복사
nljj
예제 출력 3 복사
3
예제 입력 4 복사
c=c=
예제 출력 4 복사
2
예제 입력 5 복사
dz=ak
예제 출력 5 복사
3
초기입력값
해당하는 알파벳에 맞는 밸류를 딕셔너리로 지정하고
그에 맞는 인풋을 넣으면 아웃풋이 나오고 그를 count로 세려고 했음
그러나 돌아가지 않음
인풋내의 글자가 슬라이싱이 안되어서 그런것 같음
a_dict = {'č':'c=','ć':'c-','dž':'dz=','đ':'d-','lj':'lj','nj':'nj','š':'s=','ž':'z='}
a = 'ljes=njak'
a_dict[a]
정답코드
croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
word = input()
for i in croatia :
word = word.replace(i, '*') # input 변수와 동일한 이름의 변수
print(len(word))
동일한 문자가 있으면 *로 변환됨
알파벳은 변경된 형태로 입력된다고 했으니 리스트 안에는 변경된 형태의 알파벳이 들어와있어야 함
같은 word에다가 replace 된 값을 할당해야하는 이유
https://ooyoung.tistory.com/74
백준 2941번 [파이썬] 크로아티아 알파벳 : replace 함수
[Python] 백준 알고리즘 온라인 저지 2941번 : 크로아티아 알파벳 크로아티아 알파벳 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= Python3 코드 croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='] word = input() for i in
ooyoung.tistory.com
'Algorithms > 백준알고리즘 연습' 카테고리의 다른 글
백준 일반 수학 1 (1) | 2024.12.04 |
---|---|
백준 2차원 배열 (0) | 2024.12.02 |
백준 알고리즘 1차원배열 10807, 10871, 10818, 2562, 10810, 10813, 5597, 3052, 10811, 1546 번 (1) | 2024.11.28 |
백준 알고리즘 10926번 (0) | 2024.11.25 |
백준알고리즘 1008번 A/B (1) | 2024.11.25 |