https://www.acmicpc.net/problem/1152
import sys
N = list(sys.stdin.readline().split())
print(len(N))
첫 줄에 문자열이 주어진다. 단어는 공백 한 개로 구분된다. 단어의 개수 출력.
> 처음엔 split(' ')을 썼었으나 마지막 문자에 \n이 같이 들어감을 확인했다. 이를 없애고자 strip을 붙였으나 list에는 strip이 안된다고 한다.
> map도 써봤다. map은 두 가지 이상의 인자를 필요로 한다.
>> ? 도대체 1월의 나는 문제를 어떻게 푼 거지. 해석은 뭐라는거지? map(int, input().split()) 국룰인데.. stdin에서 쓸 수 없다는 건가? 이 부분에 대해서는 추후에 다시 정리해야겠다. (2022 3월 수정)
https://www.acmicpc.net/problem/1157
import sys
sent = sys.stdin.readline().strip().upper()
uni_sent = list(set(sent))
ans = []
for a in uni_sent:
ans.append(sent.count(a))
#여기서 max(ans)하면 4, ans.count(max(ans))하면 2.
#이는 ans의 최빈값의 빈도는 4, 이 최빈값을 가진 값은 2개라는 뜻
if ans.count(max(ans)) > 1:
print("?")
else:
print(uni_sent[ans.index(max(ans))])
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
> 하나씩 잘라 리스트에 넣어주려 낑낑대다 최빈값을 찾는 법을 몰라 결국 포기하고 구글링했다.
> sent.count(a)는 sent에 있는 a의 개수를 세 준다.
> 다음에 한 번 더 풀어보자.
https://www.acmicpc.net/problem/2675
import sys
T = int(sys.stdin.readline())
for i in range(T):
R, S = sys.stdin.readline().split()
for j in S:
print(j*int(R), end='')
print()
문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램 작성.
> 'S[i]를 R번 출력 + 공백제외하고 출력'이라는 아이디어는 있었는데 split 활용때문에 또 끙끙대다 결국 구글링했다.
> 반복문 두 개를 활용하는 법에 대해서도 배울 필요가 있어보인다.
> 다음에 한 번 더 풀어보자.
https://www.acmicpc.net/problem/2941
import sys
sent = sys.stdin.readline().strip()
croatian = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
for i in croatian:
sent = sent.replace(i, '*')
#sent에 i(각각의 크로아티아 알파벳)가 있다면 *로 대체됨
print(len(sent))
첫째 줄에 최대 100글자의 단어가 주어진다. 입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력.
> 처음에 각각의 크로아티아 알파벳과 알파벳의 딕셔너리를 만들어 풀려 했는데, 안됐다.
> replace를 쓰는 건 알겠는데, if 입력문자 in croatia_alphabet 이런식으로 풀다 또 막혔다.
> 포인트는 입력문자가 아닌 크로아티아 알파벳을 반복하는 것. if를 쓰지 않아도 된다.
https://www.acmicpc.net/problem/1316
import sys
N = int(sys.stdin.readline())
ans = N
for i in range(N):
sent = sys.stdin.readline().strip()
for j in range(len(sent)-1):
if sent.find(sent[j]) > sent.find(sent[j+1]):
ans -= 1
break
print(ans)
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성
> 2941과 비슷한 문제인 것 같아 in으로 풀려다 막혀서 또 구글링했다.
> find는 해당 단어를 찾아 index를 알려준다. 다만 값을 지정해주지 않은 경우에는 첫 번째의 위치를 알려주므로, 만약 sent[j]의 인덱스가 sent[j+1]보다 크다면 이는 그룹단어가 아니다(abcabc의 경우 sent[2]는 2(=c), sent[3]은 0(=a)이므로 그룹단어가 아니다)
> 개인적으로 재미있게 잘 만든 문제같다. 이런 문제를 많이 풀다보면 알고리즘 사고능력이 쑥쑥 늘 것 같은 느낌!
> 다음에 한 번 더 풀어보자.
> 참고 :: https://namhandong.tistory.com/67
https://www.acmicpc.net/problem/10809
import sys
S = sys.stdin.readline().strip()
alph = 'abcdefghijklmnopqrstuvwxyz'
for i in alph:
if i in S:
print(S.index(i), end=" ")
else:
print(-1, end=" ")
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
> ans(정답 리스트)를 0이나 -1로만 구성된 것으로 만든 뒤 입력문자에 따라 값을 바꿔 프린트하려 했으나, 리스트는 zeros가 안된다. 리스트 전체 값을 수정하는 방법 또한 찾지못했다. 나중에 리스트 인덱싱으로 시도해볼까 싶다.
> 한 번 더, 리스트는 replace를 쓸 수 없다.
> 너무 오래 고민하는 것 같아 구글링했다.
> 대부분 리스트를 만들 필요 없이 그냥 프린트해 풀더라. 또, 나는 입력문자만큼 반복하는 for문을 만들어 풀고있었으나 다들 알파벳 리스트만큼 반복하는 for문을 만들어 풀더라. '리스트 값이 입력문자에 있다면/없다면'이라는 조건도 나와 구현 방식, 순서가 다른게 조금 슬펐다. 배워가는 과정이니까 뭐.. 괜찮다...ㅠ
> 다음에 한 번 더 풀어보자.
https://www.acmicpc.net/problem/11720
import sys
N = int(sys.stdin.readline())
temp = sys.stdin.readline().strip()
temp_sum = 0
for i in range(N):
temp_sum = int(temp[i]) + temp_sum
print(temp_sum)
N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.
> 분명 원하는 '개수 만큼' 나누는 기능이 있을거라 생각해서 split 툴팁을 읽어봤다. 'maxsplit'은 문자를 나눌 최대 분할수이다. 난 천잰가? 훗 하면서 쓰려는데 구분자가 필요하다고 한다. 어... 구분자..? 없는데... 그래서 못 썼다.ㅋㅋㅋㅋㅋㅋ 문자열 사이에 공백이나 콤마가 있다면 쓰기 좋을 것 같다.
https://www.acmicpc.net/problem/5622
import sys
dials = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ']
sent = sys.stdin.readline().strip()
times = 0
for i in range(len(sent)):
for j in dials:
if sent[i] in j:
times += dials.index(j)+3
print(times)
상근이의 할머니는 전화 번호를 각 숫자에 해당하는 문자로 외운다. 예를 들어, UNUCIC는 868242와 같다. 할머니가 외운 단어가 주어졌을 때, 이 전화를 걸기 위해서 필요한 최소 시간을 구하는 프로그램을 작성하시오.
> 직접 풀고싶어서 정말 오래 공들였으나 결국 혼자선 풀지못했다.
> 1트:딕셔너리 만들어 .get 활용(실패), 2트:리스트로 만들어 in 활용(실패), 3트:구글링...
> 2트에서 왜 실패했나 보니 다른 건 다 잘 썼는데 for문의 순서를 뒤바꿔 썼더라..ㅎ 예전에는 이런 거 헷갈리지 않았던 것 같은데, 알고리즘 쪽 공부가 필요함을 뼈저리게 느낀다.
> 응애ㅠ
'STUDY' 카테고리의 다른 글
파이썬 스터디 3주차(머신러닝) (2) | 2022.01.29 |
---|---|
파이썬 스터디 3주차(캐글) (0) | 2022.01.26 |
파이썬 스터디 2주차(머신러닝) (0) | 2022.01.24 |
파이썬 스터디 2주차(캐글) (0) | 2022.01.13 |
파이썬 스터디 2주차(백준) (0) | 2022.01.11 |