본 캠프 TIL

2월12일 TIL 코드카타

meoca1257 2025. 2. 12. 20:56

 

 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

코드카타

코딩테스트 연습 - 이상한 문자 만들기 | 프로그래머스 스쿨

 

def solution(s):
    answer = ''
    words = s.split()  
   
    for word in words:
        word_answer = ''
        for i in range(len(word)):
            if i % 2 == 0:
                word_answer += word[i].upper()
            else:
                word_answer += word[i].lower()
       
       
        answer += word_answer + ' '

    return answer.strip()  

여기서 부터 시작

 

***

  • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.

2중 for문 써야하나 좀 다르게

1)

def solution(s):
    answer = ''
    words = s.split(' ')  
   
    for word in words:
        #word_answer=''
        for i in range(len(word)):
            if i % 2 == 0:
                answer += word[i].upper()
            else:
                answer += word[i].lower()      
        answer += ' '
    return answer
 
bb = "   h e df llo   bEAUtiful world  "
solution(bb)

 

2)

def solution(s):
    answer = ''
    words = s.split(' ')  
# s.split(' ') 으로 공백 기준으로 나눠줌
   
    for word in words:
        #word_answer=''
        for i in range(len(word)):
            if i % 2 == 0:
                answer += word[i].upper()
            else:
                answer += word[i].lower()      
        answer += ' '
    return answer[:-1]
 
solution(bb)

 

의 차이 

1) 출력

'   H E Df LlO BeAuTiFuL WoRlD   '

2) 출력

'   H E Df LlO BeAuTiFuL WoRlD  '

마지막 공백이 하나 빠지고 안 빠지고 차이 

 

그러면 return answer[:-1] 로 마지막 공백 하나를 빼준건데 왜 빼야만 정답이 된걸까?

왜 내가 처음했던 1)에선 앞 공백 3개 / 뒤 공백 2개인데 출력은 앞 공백 3개 / 뒤 공백 3개가 된걸까??

--> answer += ' '로 각 단어 뒤에 공백을 추가해주고 있는데, 이렇게 하면 마지막 단어 뒤에도 불필요한 공백이 추가

 

후 슈발 

코딩테스트 연습 - 삼총사 | 프로그래머스 스쿨

 

bb = [-2, 3, 0, 2, -5]

이라 했을 때 

-2 랑

[3,0,2,-5] 가 더해져야 하고 그 다음에

[0,2,5]가 더해야져야함

 

3랑

[-2,0,2,-5] 

[0,2,-5]

 

대충 이런식 만들어야하네

 

일단 3중 for 문 써야겠네 

 
def solution(number):
    answer = 0
    for i in range(len(number)):
        for j in range(len(number)-1):
            for k in range(len(number)-2):
                if number[i]+number[j]+number[k]==0:
                    answer += 1
    return answer

오답

 

애초에 겹칠수밖에 없는 구조임

 

힌트보고옴 

 

너무 빨리 본 감이 없지않아 있음

 

def solution(number):
    answer = 0
    for i in range(len(number)-2):
        for j in range(i+1,len(number)-1):
            for k in range(j+1,len(number)):
                if number[i]+number[j]+number[k]==0:
                    answer += 1
    return answer

정답

 

해설

일단 i 가 겹치면 안되니까 j 범위의 시작은 i+1 k또한 마찬가지 j+2

범위는 최대 마지막 인덱싱 까지니까 

 

참고

c=range(len(bb))
c           ## range(0, 5)
# 인덱스 0~4까지 5개 다 들어가네 

 

코딩테스트 연습 - 크기가 작은 부분 문자열 | 프로그래머스 스쿨

 

강조

예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.

 

def solution(t, p):
    answer = 0
    return answer

에서 answer 에 작거나 같을 때 answer += 1 해주면 되네 

 

len(p) 가 들어갈테고 

range를 써야겠는데 

 

for i in range(len(t)-len(p)+1):

쓰면 t[i] 라고 했을 때 1개만 묶임 난 3개씩 묶인거와 p를 정수형으로 바꿔서 비교해야해

 

3개씩 묶는건 슬라이싱이고 

그럼 슬라이싱 기초를 잘 다지면 될듯

 

막히누

 

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

오답

 

t "500220839878"

p "7" 일때

결과가 8인데 1나옴

 

어디가 틀렸다는 소리임

len(t) ## 12 len(p) ## 1

 

일단 t[i:3+1] 부터 잘못됨  

t[i:len(p)+1] 이 되야함 

 

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

와 .. 처음으로 다른 사람 풀이 안보고 혼자서 2번 시도만에 성공 

도파민 미쳤다 ㅠㅠ 

 

다른 사람 풀이

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

리스트 컴프리헨션 숩발 근데 다른 사람 의견 보면 가독성 떨어지고 

' len(p)나 int(p) 가 불필요하게 여러번 계산되서 resource 낭비' 라는 말이 있는데 흠 뭔소리지?

 

--> 매번 t[i: i+len(p)]를 만들 때마다 len(p)가 호출 => 비효율적을 불필요한 resource 낭비로 표현

--> int(p)가 반복문을 돌 때마다 매번 호출 => 비효율적을 불필요한 resource 낭비로 표현

 

반복문 밖에서 한 번만 계산하도록 개선하면 성능을 최적화

성능 최적화는 한번도 생각 안해봤는데 

 

최적화 코드 + 리스트 컴프리헨션은 

def solution(t, p):
    len_p = len(p)  # len(p)를 미리 계산
    int_p = int(p)  # int(p)를 미리 계산
    return len([t[i: i+len_p] for i in range(len(t)-len_p+1) if int(t[i: i+len_p]) <= int_p])

이거네 

 

내 코드는 

def solution(t, p):
    answer = 0
    len_p = len(p)  # len(p)를 반복문 밖에서 한 번만 계산
    int_p = int(p)  # int(p)를 반복문 밖에서 한 번만 계산
    
    for i in range(len(t) - len_p + 1):
        if int(t[i:i+len_p]) <= int_p:  # len(p)로 범위를 지정
            answer += 1
    
    return answer

가 되고 

 

중요한 점 !! 

-> 리스트 컴프리헨션을 쓰면 보통 성능을 끌어올릴 수 있음

 

코딩테스트 연습 - 최소직사각형 | 프로그래머스 스쿨

 

일단 sizes[i][j]해서 2중 for문 쓰고 

아니다 어짜피 2개뿐이니까 2중 쓸거 없겠다 4가지 경우의 수이고 

일단 max,min 값부터 구하고 

 

음. 

 

문제 이해되니까 풀리네 ㅈㅈ

 

def solution(sizes):
    max_ = []
    min_ = []
    for i in range(len(sizes)):
        max_.append(max(sizes[i]))
        min_.append(min(sizes[i]))
    a = max(max_)
    b = max(min_)
    return a*b

 

 

다른 사람 풀이

def solution(sizes):
    return max(max(x) for x in sizes) * max(min(x) for x in sizes)

 

리스트 캄프리헨션 미쳤네 진짜

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

아티클 스터디

데이터 시각화 101: 2직관적인 데이터 시각화 만들기 | 요즘IT

 

  • 요약 : 직관적인 시각화 만들기
  • 주요 포인트 : 
    1. 뇌가 바라보는 시각 정보

    1) 뚜렷한 시각 요소 파악 (3원색 , 원, 지도 등)
    2) 패턴(동일한 색 등)
    3) 해석(시각 요소 및 패턴을 이용하여 뇌에서 능동적으로 의미르 부여하고 해석함)

    2. 비슷한 특징 가지기

    3. 같은 방향으로 움직이기

    ★시각 정보 처리 과정

    1) 색, 질감, 방향, 배열 등의 시각 요소들을 추출
    2) 추출된 시각 요소들을 이용하여 패턴을 발견 (우리 뇌는 큰 전체를 이해하는데 탁월함)
    -> 근접성이나 유사성 등의 규칙을 이용하여 요소들을 배열하면, 뇌는 이들을 하나의 그룹으로 인식
    3) 추출된 시각 요소 및 패턴에 능동적으로 의미를 부여하고 해석함 
    => 1,2단계에서 추출되는 시각 정보들을 의도적으로 디자인하여 해석 단계에 도움주기
  • 핵심 개념 :
  • 용어 정리 :
    전주의적 속성 : 무엇을 보자마자 주의를 기울이지 않아도 알아차리는 시각 요소
    게슈탈트 원리 : 전체가 부분의 합보다 크다는 개념
                              사람은 개별 요소들이 아니라 전체적인 패턴이나 구조를 중심으로 인식하려는 경향이 있음
  • 실무 적용 :
  • 관련 사례 :
  • 가상 시나리오 :