백준 6단계 코딩테스트

릿·2023년 2월 22일
0

1. 팰린드롬인지 확인하기

문제: 알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.

팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다.

level, noon은 팰린드롬이고, baekjoon, online, judge는 팰린드롬이 아니다.

입력: 첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.

출력: 첫째 줄에 팰린드롬이면 1, 아니면 0을 출력한다.

1. 내 풀이

이전 문제에서 본 [::-1]을 한번 써봤다. 매우 유용했다!

n = input()
if n == n[::-1] : print(1)
else : print(0)

2. 크로아티아 알파벳

문제: 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.

예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.

입력: 첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.

단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.

출력: 입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다

1. 내 풀이

  • 처음에 strip으로 크로아티아 알파벳을 제거하려고 했는데 strip은 문자열 가운데에 있는 문자는 삭제하지 못한다고 하여 replace로 바꿨다. (strip: 앞뒤 공백 또는 문자를 제거해주는 함수)
  • replace로 해당 문자를 ''로 바꿨더니 문자가 사라지고 앞뒤에 있던 문자가 합쳐져서 새로운 크로아티아 알파벳이 되는 경우가 발생, replace로 크로아티아 알파벳을 공백으로 바꾸고 나중에 공백을 없애주는 코드를 추가했다.
  • replace를 사용하니 크로아티아 알파벳이 1개건 여러개건 전부 삭제하였음. 근데 cnt은 하나만 올라가니 계산이 안 맞았다. replace전 count함수를 써서 해당 개수를 변수에 저장한 다음 cnt에 더해주었다. 그리고 남아있는 문자열의 갯수와 더해주면 완료!
n = input()
compareLi = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
cnt = 0

for i in compareLi :
    tmpCnt = 0
    if n.find(i) != -1 :
        tmpCnt = n.count(i)
        n = n.replace(i, ' ')
        cnt += tmpCnt
num = len(n.replace(' ', ''))
print(num + cnt)

2. 다른 사람의 풀이

와...이런 방법이ㅋㅋㅋ...

word = input()
lst = ['c=','c-','dz=','d-','lj','nj','s=','z=']
for i in lst:
    word = word.replace(i,'*')
print(len(word))

3. 그룹 단어 체커

문제: 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.

단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.

입력: 첫째 줄에 단어의 개수 N이 들어온다. N은 100보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 단어가 들어온다. 단어는 알파벳 소문자로만 되어있고 중복되지 않으며, 길이는 최대 100이다.

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

1. 내 풀이

처음에 set으로 입력 문자의 중복 제거를 하고 lstrip으로 하나씩 제거하려고 했는데, set이 순서를 무시하고 중복제거를 하길래 그냥 for문으로 중복제거를 하고 삭제를 시작했다.

n = int(input())
cnt = 0

for i in range(n) :
    string = input()
    li = []
    for j in string :
        if j not in li:
            li.append(j)

    for k in li :
        string=string.lstrip(k)
    if len(string) == 0 : cnt+=1

print(cnt)

2. 다른 사람의 풀이

  • sorted함수는 sort함수와는 다르게 정렬된 결과값을 반환해주는 함수이다. 두번째 매개변수에 key를 쓰게되면 해당 키를 기준으로 정렬을 해준다.
  • 아래의 경우 입력값이 aba가 될 경우
    list(a)는 ['a', 'b', 'a']인데 sorted(a, key=a.find)를 하니까 ['a', 'a', 'b']가 나왔다. 꽤나 똑똑한 방법인 것 같다!
N = int(input())
for i in range(N):
    a = input()
    if list(a) != sorted(a, key=a.find):
        N -= 1
print(N)
profile
항상 재밌는 뭔가를 찾고 있는 프론트엔드 개발자

0개의 댓글