Today I Learned

[TIL] 백준 1316, 프로그래머스 12917 [21-10-30]

목차

TIL

- 백준 1316

- 프로그래머스 12917

 


TIL

 코딩 테스트가 1주일 남았기 때문에, 기존의 자료구조 강의를 일정 조정을 했다. 자소서 준비에 집중하고, 파이썬 알고리즘 강의를 수강해야겠다. 하루에 대부분의 시간을 코딩 테스트 준비로 보내야 겠다.

 

 

백준 1316

https://www.acmicpc.net/problem/1316

 

1316번: 그룹 단어 체커

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

www.acmicpc.net

 if문이 많아 지저분해 보이지만, 나름 분기를 조정을 하려고 flag, not_group, _double 과 같이 bool형태로 사용하였다. for문안에 두 개의 for문이 돌며 그 for문안에서도 하나의 for문이 돌게 코드를 작성했다. index for문은 group 인지 아닌지 검사해주는 for문이다.

 

n = int(input())
_str = [input() for _ in range(n)]

flag = 0
for j in range(len(_str)):
    tmp = []
    group = []
    for i in range(len(_str[j])):
        if _str[j][i] not in tmp:
            tmp.append(_str[j][i])

    flag = 0
    not_group = 0
    _double = 1
    for i in range(len(_str[j])):
        if flag == 1:
            for index in range(len(group)):
                if _str[j][i] == group[index]:
                    if i > 0:
                        if _str[j][i] != _str[j][i - 1]:
                            not_group = 1
        if _str[j][i] in tmp:
            flag = 1
            group.append(_str[j][i])
        if i > 0:
            if _str[j][i - 1] == _str[j][i]:
                _double = 0
    if not_group:
        n -= 1
print(n)

문제 풀이 시간 1시간 내외

 

 

프로그래머스 12917

https://programmers.co.kr/learn/courses/30/lessons/12917

 

코딩테스트 연습 - 문자열 내림차순으로 배치하기

문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요. s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로

programmers.co.kr

 처음에 생각했었던 문제는 아스키코드로 싹다 정렬을 해야하는 줄 알았다. return값을 보니 그냥 역순 출력이었다. 간단한 문제였지만 오히려 꼬아서 생각해서 문제 풀이하는데 시간 소요가 더 걸린 것 같다. 출제가가 의도한 대로 문제를 풀이하려 노력하자.

 

s = input()


def solution(s):
    answer = ''
    tmp_list = []
    for _str in s:
        tmp_list.append(_str)
    tmp_list.sort(reverse=True)
    for _one_str in tmp_list:
        answer += _one_str

    return answer


print(solution(s))

문제 풀이 시간 30분 내외