백준 5단계 코딩테스트

릿·2023년 2월 20일
0

1. 단어 공부

문제: 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

입력: 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

출력: 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

1. 내 풀이

처음엔 아래와 같은 코드를 짰는데 시간초과가 떴다. 검색을 해보니 중복제거를 하지 않아서 그렇단다.

n = input().upper()
maxNum = 0
maxIdx = 0
maxCnt = 0
    
for i in n :
    cnt = 0
    for j in n :
        if i == j :
            cnt += 1
    if maxNum < cnt:
        maxNum = cnt
        maxIdx = i
        maxCnt = 0
    elif maxNum == cnt:
        maxCnt += 1
            
if maxCnt < 1 :
    print('?')
else :
    print(maxIdx)

그래서 set함수를 써서 중복제거를 해주었다. set함수는 문자열 중복도 제거해준다고 한다.

string = input().upper()
setStr = ''.join(set(string))
maxNum = 0
maxStr = 0
maxCnt = 0

for i in setStr :
    cnt = 0
    for j in string :
        if i == j : cnt += 1
    if maxNum < cnt:
        maxNum = cnt
        maxStr = i
        maxCnt = 0
    elif maxNum == cnt:
        maxCnt += 1

if maxCnt > 0 : print('?')
else :
    print(maxStr)

2. 다른 사람의 풀이

  • 비교대상 문자열을 알파벳 총 개수만큼 도는 for문에 count함수를 써서 해결하셨다. 근데 이렇게 해도 중복문자까지 다 돌텐데 시간초과가 안 뜨는구나...
  • count함수는 리스트나 문자열 안에 해당 요소 개수를 반환해주는 함수이다.
str = input().upper()
max_num = 0
for i in range(26):
    cnt = str.count(chr(i + 65))
    if max_num < cnt:
        max_num = cnt
        max_char = chr(i + 65)
    elif max_num == cnt:
        max_char = "?"
print(max_char)

2. 단어의 개수

문제: 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

입력: 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.

출력: 첫째 줄에 단어의 개수를 출력한다.

1. 내 풀이

받은 입력을 list에 저장 후, 배열의 길이를 출력했다.

n = list(map(str, input().split()))

print(len(n))

3. 상수

문제: 상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.

상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.

두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.
입력: 첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다.

출력: 첫째 줄에 상수의 대답을 출력한다.

1. 내 풀이

입력받은 숫자를 문자 배열로 바꿔서 0번 인덱스와 2번 인덱스 자리를 바꿔준 후 다시 배열을 합쳐서 숫자로 바꿔 비교했다.

a, b = map(str, input().split())
a = list(a)
a[0], a[2] = a[2], a[0] 
a = int(''.join(a))
b = list(b)
b[0], b[2] = b[2], b[0]
b = int(''.join(b))

if a < b : print(b)
else: print(a)

2. 다른 사람의 풀이

...이렇게 한 줄로 끝낼 수 있다고?
생각해보니 그냥 역순으로 출력하면 되는거였음.
[::-1]이 역순으로 출력해주는 거라고 한다.

print(max(input()[::-1].split()))
profile
항상 재밌는 뭔가를 찾고 있는 프론트엔드 개발자

0개의 댓글