ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] 01문자열,02재귀,03해쉬(셋,맵)
    코테공부 2025. 2. 5. 20:04

    [01] 문자열

    실습문제 04 반지

    반지는 문자열의 시작과 끝이 연결된 형태로 글자가 새겨져 있습니다.

     

     

    순환구조로 생각해서 문자열 처리에 고민을 많이함

    스택으로 push pop 잇는 방법을 생각했는데 너무 복잡함 => 문자열 두번 이어붙이는 걸로 해결

    from collections import deque
    def solution(wordfind, N, ring):
        answer = 0
        for myStr in ring:
            myRing=myStr+myStr
            if wordfind in myRing:
                answer+=1
        return answer

     

     

     

     

     

    실습문제 04 우선순위

     

     

    location을 생각하는 아이디어가 떠오르지않음

    location은 하나씩 pop될때마다 -1씩 감소하고,

    내 차례였는데 우선순위가 아니었다면 location이 음수가 됨

    내 차례인 프로세스는 맨뒤로 돌아갔으니 len(q)-1을 생각하는게 중요함.

    # from collections import deque
    def solution(priorities, location):
        answer = 0
        q=priorities
        while(q):
            myMax=max(priorities)
            temp=q.pop(0)
            location-=1
            if temp >= myMax:
                answer+=1 #실행
                if location<0:
                    break
                
            else:
                q.append(temp)
                if location<0:
                    location=len(priorities)-1
            
                
        return answer

     

     

     

    [02] 재귀

    실습문제01 바둑판

     

    바둑판 종료 조건 다시 생각해볼것

    문제 설명

    바둑을 좋아하는 다원이는 바둑판을 바라보다가 갑자기 궁금해 졌습니다.

    크기가 다른 바둑판의 정가운데 바둑돌을 두고 그 바둑돌을 중심으로 십자가 모양을 그린다음 같은 규칙으로 각 4개의 새로운 공간에 다시 정 가운데 바둑돌을 두면 몇개까지 둘 수 있는지 알고싶어합니다.

    하나하나 바둑돌을 두면서 셀 수도 있지만 크기가 큰 바둑판은 아무래도 너무 많은 시간이 걸릴꺼 같습니다. 프로그램을 작성해 봅시다.

    다원이는 자신의 n * m크기의 바둑판에 바둑돌을 두려고 합니다.(각각 1,000,000이하)
    정 가운데에 둘 수 있을 경우에만 바둑돌은 놓고 그렇지 않는경우는 멈춥니다.

    예를 들어, n = 7, m= 15일 경우 다원이의 바둑판은 다음과 같이 변합니다.

     

    .은 바둑돌을 놓을 수 있는자리, c는 바둑돌을 나타냅니다.

    이 밭에서는 바둑돌이 21개가 필요합니다, 하지만 55크기의 밭에서는 22의 정중앙이 없기 때문에 바둑돌은 하나만 있으면 됩니다.

    다원이를 도와서 다원이의 바둑판에 바둑돌이 몇개나 필요한지 계산하는 프로그램을 작성해주세요.

    #입력과 출력을 자유롭게 작성해주세요
    
    def f(low, col):
        if low%2==0 or col%2==0:
            return 0
        #자유롭게 코딩하세요
        
        return 1+4*f(low//2,col//2)
        
    low, col = map(int, input().split())
    print(f(low, col))

     

     

     

     

    [03]Hash/Set

    개념

    #set
    mySet=set()
    
    mySet.add(1)#요소추가
    mySet.add(2)
    
    mySet.update([3,4,5]) #여러요소추가
    mySet.discard(2) #없어도 오류안남, remove()는 요소 없을 경우 오류남
    
    #리스트에서 중복 제거하려면?
    #리스트 -> set -> 리스트
    numbers=[1, 2, 2, 3, 4, 4, 5]
    unique_numbers=list(set(numbers))
    print(unique_numbers)
    #두 리스트의 중복 요소를 찾으려면?
    list1=[1,2,3,4]
    list2=[2,4,5,6]
    print(set(list1) & set(list2))

     

     

     

    Hash/Map

    def solution(n):
        answer = 0
        text = "apple banana apple cherry banana apple"
        word_count = {}
        #단어의 빈도수 계산
        for word in text.split(" "):
            word_count[word]=word_count.get(word,0)+1
        print(word_count)
        
        
        #공통된 키값 찾기
        dict1 = {"a": 1, "b": 2, "c": 3}
        dict2 = {"b": 2, "c": 4, "d": 5}
        common = {k: dict1[k] for k in dict1.keys() & dict2.keys() if dict1[k]==dict2[k]}
        print(common)
        return answer

     

     

     

     

     

    내림차순 정렬

    Lsorted(L,reverse=True)

     

    LV2.가장큰수

    숫자배열이 주어지면 문자열로 바꾼 조합으로 가장 큰 수를 찾음.

    가장 큰수를 찾는거라 모든 경우의 수를 찾는 과정을 dfs라고 생각했는데 시간 초과남.

    정렬하는 과정에서 사전식 문자열 비교로 정렬을 통해 순서대로 숫자를 나열하는것이 핵심포인트

    def solution(numbers):
        numbers=list(str(x) for x in numbers) #문자열로 바꿈
        #사전식으로 숫자 문자열을 비교
        #[3,34,600,30]이 있을때, 문자열로 합치므로 앞자리수부터 사전식 비교가 필요.
        #이때 자릿수가 다르면 제대로 동작 안할 수 있음 (예. "3","30" 중에서는 3를 골라야함) -> x*3으로 "333","303030"으로 만들어서 비교
        sortedArr=sorted(numbers,key=lambda x:x*3,reverse=True)
        answer="".join(sortedArr)
        if answer[0]=="0":
            answer="0"
        return answer

    '코테공부' 카테고리의 다른 글

    [프로그래머스] 문자열 압축  (0) 2025.02.27
    [백준 16926번] 배열 돌리기 1  (0) 2025.02.27
    [백준] 누적합구하기  (0) 2025.02.07
    파이썬 기본 check point 정리  (0) 2024.11.22
    Python 코테 기본 문법  (0) 2024.11.18
Designed by Tistory.