스터디 93

SWEA 4881 - 배열 최소 합

처음 든 생각 - 일단 백트래킹이고 (내가 더럽게 못하는 유형) - n-queens 문제랑 비슷한데 대각선만 빠진 형태네 - 각 열에 대해서 하나씩 선택해가면서 모든 값을 비교해봐야겠다. def search(i, s): global result if s > result: return elif i == N: result = min(result,s) else: for j in range(N): if col[j] == 0: // 열 방문 찍고 col[j] = 1 // 그 다음 행으로 넘어가서 탐색 search(i+1, s+a[i][j]) // 다시 복귀 -> 백트래킹 col[j] = 0 T = int(input()) for test_case in range(1, T + 1): N = int(input()) a..

끄적여보는 2023년 회고

2023년도 끝났다. 2024년이 시작된지 일주일이 넘었지만 아직도 사람들을 만나면 "새해복 많이 받으세요"를 하기 때문에 뒷북까지는 아니라고 생각하는 회고를 작성해보려 한다. 한 번도 봐본 적 없는 원펀맨 ost를 들으면서 회고록을 끄적여본다. 1월 플러터에 대해서 갑자기 관심이 솟구쳤었다. 노마드 코더의 플러터 강의를 듣고 앱 개발 생각보다 할만하네? 라고 생각하여 실제 나만의 앱을 출시하기로 결심했었다. 강의에서는 웹툰 앱을 만들어보는 것이였는데 나는 간단한 뽀모도로 타이머 앱을 기획하고 개발하기로 했다. 생애 첫 앱 개발 기록 - Pomodoro 앱 기획 저번주부터 다트와 플러터를 시작해보면서 정말 재밌었다. 안드로이드 에뮬레이터 띄우는 것도 신기하고 구현하는 난이도도 높지 않아 자신감이 뿜뿜 올..

스터디 2024.01.08

python 코딩테스트 - 프로그래머스 다음 큰 숫자

처음 든 생각 - 하나씩 키워가면서 일일이 탐색을 해야겠다 - 이진수로 바꾸는 것은 저번에 배운 bin 함수를 활용해서 해봐야지 나의 답 def solution(n): answer = 0 bn = bin(n) cnt = bn[2:].count("1") while True: n+=1 if bin(n)[2:].count("1") == cnt: return n 주어진 수가 가진 1의 개수를 cnt 변수에 담아놓고 반복문을 통해서 알맞은 수를 찾아가는 과정으로 구현한 것이다. 찾을 때까지 반복문을 돌게 하기 위하여 while True를 사용했고 찾으면 바로 리턴을 하면서 solution 함수를 끝내는 방식으로 구현하였다. 다른 사람들의 풀이도 변수명만 다를 뿐 사용한 함수도 똑같아서 따로 참고해볼 사항은 없었다.

python 코딩테스트 - 프로그래머스 이진 변환 반복하기

처음 든 생각 - 문제에 나온 그대로 차근차근 단계를 밟아나가자 (1) 0 제거 (2) 남은 1의 개수만큼 이진수로 변환 (3) (1)~(2) 과정 반복 - 0을 제거할 때 하나씩 count하면 될 거고 - 이진수 변환하는 건 혹시 라이브러리나 내장함수가 있을까? -> 아니면 재귀로 해서 풀어야된다 나의 답 def solution(s): zeros = 0 count = 0 tmp = 0 while len(s) > 1: for i in s: if i == "0": zeros+=1 else: tmp += 1 s = format(tmp,'b') tmp = 0 count += 1 return [count , zeros] 0의 개수, 이진변환 횟수, 1의 갯수를 담을 3개의 변수를 선언하였다. 반복문은 while..

python 코딩테스트 - 프로그래머스 최솟값 만들기

처음 든 생각 - 순차적으로 곱해주는데 곱하는 수들의 조합을 어떻게 해줘야될까 - 가장 큰 놈이랑 가장 작은 놈이랑 곱해주고 이런 식으로 큰 수 x 작은 수 조합으로 계속 곱해야겠네 나의 답 def solution(A,B): answer = 0 A = sorted(A) B = sorted(B,reverse=True) for i in range(len(A)): answer += A[i] * B[i] return answer 하나의 배열은 내림차순, 다른 배열은 오름차순으로 정렬을 하였다. 그 다음 반복문을 돌면서 같은 인덱스를 참조하며 곱한 값을 더해준다. 그리디의 가장 일반적인 케이스라고 생각된다. 큰 수를 가장 적게 더해주는 방식으로 차근차근 나아가면 되는 방식으로 해결되는 문제였다. 다른 사람의 답 ..

python 코딩테스트 - 2022 카카오 인턴 기출 2번

https://school.programmers.co.kr/learn/courses/30/lessons/118667 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 처음 든 생각 - 대놓고 큐 쓰라고 줬고 popleft랑 append를 쓰면 되겠다. 이 함수들은 시간복잡도 O(1)이니깐 - 서로 대소 비교를 하면서 큰 놈에서 작은 놈으로 하나씩 옮겨가주면서 같은지 아닌지 계속 확인하면 되겠다. 나의 답 from collections import deque def solution(queue1, queue2): q1 = deque(queue1) q2 = deq..

python 코딩 테스트 - 카카오 2022 인턴 기출 1번

https://school.programmers.co.kr/learn/courses/30/lessons/118666 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제가 매우 길어 링크를 첨부했다. 처음 든 생각 - 성격 유형 점수랑 성격 유형이 4가지로 고정이니깐 같은 인덱스로 조작해야겠다. - 앞에 오는 게 뭔지 관리를 해줘야겠다. - 각 지표별 성격유형을 점수를 매긴 후 정렬을 해주고 합쳐줘야겠다. - 같은 점수를 나타내더라도 알파벳 순서로 정렬 되므로 굳이 추가적인 작업은 필요 없겠다. 나의 답 def solution(survey, choices)..

python 코딩테스트 - 프로그래머스 구명보트

처음 든 생각 - 정렬을 한 뒤에 큐나 스택 자료구조를 사용하면 되겠다. 자료구조 선택 이후 그 다음 계산로직만 구현하면 된다고 판단해서 바로 코드를 작성했다. 나의 답 from collections import deque def solution(people, limit): answer = 0 q= deque(sorted(people)) while q: if len(q) == 1: q.popleft() answer += 1 break if q[0] + q[-1] > limit: q.pop() answer += 1 else: q.popleft() q.pop() answer += 1 return answer 큐 자료구조를 사용했고 길이가 1인 특수 케이스에 대해서 따로 처리를 한 후 최솟값과 최댓값을 짝을 ..

python 코딩테스트 - 프로그래머스 전력망을 둘로 나누기

처음 든 생각 - 이건 무조건 DFS를 써야된다. - 하나가 끊어진 모든 경우를 탐색하면서 DFS를 해서 차이를 구하면 되겠다. 나의 답 def solution(n, wires): answer = n def dfs(g,v,s): v[s] = True for k in g[s]: if v[k] == False: dfs(g,v,k) for i in range(len(wires)): a,b = wires[i] wires[i] = [0,0] g = [[] for _ in range(n+1)] v = [False for _ in range(n+1)] for j in range(n-1): x,y = wires[j] if x > 0: if y not in g[x]: g[x].append(y) if x not in g[..

728x90