Data Analyst KIM

[Coding Club] 2023.06.22 - 프로그래머스Lv.1 문제 풀이(크기가작은부분문자열,신규아이디추천) 본문

일상/Coding Club

[Coding Club] 2023.06.22 - 프로그래머스Lv.1 문제 풀이(크기가작은부분문자열,신규아이디추천)

김두연 2023. 6. 22. 15:38
반응형

활동 : Coding Club

일시 : 2023.06.22
내용 : 프로그래머스Lv.1 문제 풀이
문제 : 크기가작은부분문자열,신규아이디추천
다음주 과제 : 대충 만든 자판, 추억 점수
 

코딩을 재미있어 하는 사람들

 

문제1. 신규 아이디 추천

문제1. 신규 아이디 추천

<내코드>

def solution(new_id):
    answer = '' 
    new_id = new_id.lower() # 1단계
    for word in new_id:     # 2단계
        if word.isalnum() or word in '-_.':
            answer += word

    while '..' in answer:   # 3단계
        answer = answer.replace('..', '.') # 단계적으로 계속 줄임(.을 만족할 때까지)

    if answer[0] == '.' and len(answer) > 1 :  # 4단계
        answer = answer[1:]
    else : 
        answer
    
    if  answer[-1] == '.' : 
        answer = answer[:-1]
    else :
        answer
    
    if answer == '' :  # 5단계
        answer = 'a'
    else : 
        answer 

    if len(answer) >= 16:    # 6단계 
        answer = answer[:15]
        if answer[-1] == '.':
            answer = answer[:-1]

    if len(answer) <= 2:     # 7단계
        answer = answer + answer[-1] * (3-len(answer)) # 3개를 만들어주기 위해서
    return answer

 

<다른사람 코드>

def solution(new_id):
    new_id = new_id.lower() # 1단계

    new_id2='' #2번
    for i in range(len(new_id)):
       if (new_id[i].isdigit()) | (new_id[i].isalpha()) | (new_id[i] in ['-','_','.']):
           new_id2+=new_id[i]
    new_id = new_id2

    b = []
    for i in range(len(new_id)):  # 3단계
        if new_id[i] == '.':
            b.append(i)

    # return b
    # [0, 1, 2, 6, 7, 9]
    #['.', '.', '.', 'b', 'a', 't', '.', '.', 'y', '.', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm']
    new_id_list = list(new_id)
    # return new_id_list
    for i in range(len(b)-1,0,-1):
        if b[i] - b[i-1] == 1:
            del new_id_list[b[i]]

    new_id=''
    for i in new_id_list:
        new_id+=i

    if new_id[0] == '.':  # 4단계
        if len(new_id)==1:
            new_id='a' # 5단계
        else:
            new_id = new_id[1:]
    if new_id[-1] == '.':
        new_id = new_id[:-1]

    if len(new_id) >= 16:  # 6단계
        new_id = new_id[:15]
        if new_id[-1] == '.':
            new_id = new_id[:-1]

    if len(new_id) <= 2:  # 7단계
        for i in range(3):
            new_id += new_id[-1]
            if len(new_id) == 3:
                break

    return new_id

 

3단계의 경우 나도 if문으로 사용하려고 했는데 에러나는 부분들이 많아서 while을 이용해서 조금 구현을 했다.

다른 사람들은 if로 구현을 했는데 잘 보면서 부족한 점을 알 수 있었다.

 


2. 크기가 작은 부분 문자열

<내코드>

나는 두가지의 코드를 준비했다. 처음에는 list방을 만들어서 조건에 해당되는 값을 넣고 비교를 했다.

하지만 list방을 만들지 않고 바로 처리가 가능할 것 같아서 2번코드도 만들었다

#1. list에 저장 후 비교
def solution(t, p):
    answer = 0
    t_li = []  # len(p)에 따른 t를 저장할 방
    for i in range(0, len(t)-len(p)+1): 
        t_li.append(t[i:i+len(p)])  # len(p)에 따른 t를 t_li에 저장

    for v in t_li:  
        if int(v) <= int(p):        # 비교
            answer += 1
    return answer

#2. list에 저장 하지 않고 비교
# def solution(t, p):
#     answer = 0
#     for i in range(len(t)-len(p)+1) :
#         if int(t[i:i+len(p)]) <= int(p):
#             answer+=1
#     return answer

<다른사람 코드>

# def solution1(t,p):
#     l = []
#     result = 0
#     for i in range(len(p),len(t)+1):
#         l.append(t[len(l):i])
#
#     for i in l:
#         if int(i) <= int(p):
#             result += 1
#     return result
#
# print(solution1(t,p))

def solution2(t,p):
    result = 0
    for i in range(len(t)-len(p)+1):
        if int(t[i:i+len(p)]) <= int(p):
            result += 1
    return result

승호형도 리스트 방을 만들고 구현 후에 방을 생성하지 않는 코드를 작성하셨다.

내 코드와 조금 다른 점은  

나 : t[i:i+len(p) 

승호형 : t[len(l):i]

첫번째 for문에서 범위를 0부터 시작하는 것이 아닌 len(p)부터 시작하는 코드를 작성했다.

직관적이고 일반적인 방법은 아니였지만, 생각을 하는 방법이 조금 다르다는 것을 보고 신기했다.

나와 똑같은 코드를 작성하는 사람들만있다면 코딩 테스트 그룹활동을 하는 것이 의미가 없겠지만

같은 문제를 다른 방법으로 생각을 했고 공유를 했기 때문에 의미 있었다.

 

반응형