본문 바로가기

전체 글109

프로그래머스 Lv2 숫자 변환하기 (python) 숫자 변환하기 풀이 처음에는 재귀로 풀려고 했다가 너무 많은 재귀로 실패해서, 이후엔 어떻게 풀어야 하는지 감도 안 잡혔다. 찾아보니 BFS나 DP로 풀어야 한다고 했다. 너무 오랜만에 만지는 BFS라 감을 잃었지만 다시 시도해봤다. 우선 다음처럼 풀었다. 1. visited를 생성 2. queue를 생성하고 Q에 초깃값으로 x를 입력 3. visited [x]를 0에서 1로 입력 3-1. 찾고 나서 1빼줄건데, 1로 해준 이유는 0을 False처럼 다루기 위해서임 4. while문을 진행하기. Q의 처음 값을 확인하고, y가 아니면 할 수 있는 3가지를 이용하기. 3가지가 제한 없는 내용이라면, visited [다음 수]에 visited [이전 수]+1 입력 5. 3가지 방법을 통해서 나온 중 Q에서 .. 2024. 2. 1.
프로그래머스 Lv2 이진 변환 반복하기 (python) 이진 변환 반복하기 풀이 주어진 문자열이 '1'이 될 때까지 이진 변환을 반복하면서 반복 횟수와 함께 지운 0의 개수를 반환해야 하는 문제이다. 반복을 몇 번 해야하는지 모르므로 while문을 이용했다. 제거한 0의 갯수를 입력한 변수 생성 및 while문 생성 while문 안에서 count('0')를 이용해서 0 제거 1의 갯수만큼으로 다시 2진수로 변환시키니 bin()을 이용하고, 이렇게 하면 0b~~ 로 출력되니 슬라이싱을 이용 반복 횟수 +1 및 while문에서 나오면 return값을 return 하기 def solution(s): count_zero = 0 i = 0 while len(s) > 1 and s != '1': i += 1 count_zero += s.count('0') s = bin.. 2024. 2. 1.
프로그래머스 Lv1 [PCCE 기출문제] 10번 / 데이터 분석 (python) [PCCE 기출문제] 10번 / 데이터 분석 풀이 문제를 풀었는데 푼 방식은 맞았지만, ext까지 고려해야하는 것을 잊어서, 2번인가 완전실패했다. 왜 안되지 하고 다시 읽었더니 ext를 사용해야하는 코드를 작성안했다. 아래처럼 풀었다. 1. data를 for문을 돌려서 그 안에 있는 값들 중 ext의 val_ext에 해당되는 것들만 추출해서 tmp_data에 입력했다. 1-1. 이 때, 각 ext가 다르므로 if문을 작성하여 걸러주는 작업을 했다. 만약 더 조건이 길어졌다면 if가 아닌 for문을 사용했을 수도 있을 듯 하다. 2. sorted()를 이용해서 tmp_data를 sort_by에 따라 정렬하기 위해 sorted(, key=lambda x: x[])를 사용했다. 여기서도 sort_by의 종류.. 2024. 2. 1.
프로그래머스 Lv1 [PCCE 기출문제] 9번 / 이웃한 칸 (python) [PCCE 기출문제] 9번 / 이웃한 칸 풀이 어려운 문제는 아니다. 반복문만 쓸 줄 알면 바로 풀 수 있다. 1. 우선 board가 주어지므로 이를 활용한다. 또한 board와 board [n]의 길이는 같음을 인지. 2. 문제에서 적힌대로만 풀어도 문제없지만, 난 내 방식대로 dr, dc를 만들어서 상하좌우로 돌아가는 것을 이용했다. 이때 h가 dr과 w가 dc와 연결된다. 3. 상하좌우 4개이므로 for문을 4까지 반복하면서 각 dr[0]~dr[3], dc [0]~dc [3]을 이용하여, 찾으려는 board의 상, 하, 좌, 우에 같은 색이 있는지 확인한다. 3-1. 이 때, dr과 dc를 사용하다 범위를 벗어나게 되면 런타임에러나 인덱스 아웃이 뜨기에 찾는 범위를 0 2024. 2. 1.
유클리드 호제법을 이용한 최대공약수, 최소공배수 구하기 (python) 유클리드 호제법 최대공약수를 구하기 위해 사용할 때 쓰는 방법이다. a > b 인 두 수가 있을 때, a를 b로 나눈 나머지는 r이라고 해보자. 이때, a와 b의 최대공약수는 b와 r의 최대공약수와 같다는 것을 이용한다. 위 내용을 기반으로 계속 반복하면 실질적인 a, b의 최대공약수를 구할 수 있다는 것이다. 예시로 44와 33이 있다고 해보면, 1. a = 44, b = 33, r = 11 => b와 r의 최대약수를 구하기. 2. a = 33, b = 11, r = 0 => 나머지가 0이므로 b가 최대공약수가 된다. 이러한 방법으로 python 코드로 최대공약수와 최소공배수를 구성해 보자. 최대공약수 및 최소공배수 최대공약수 보통의 경우 아래 최대 공약수 함수는 주어지는 값 a, b가 있을 때 a가 .. 2024. 1. 31.
프로그래머스 스킬체크 레벨 1 통과해따리 프로그래머스 스킬체크 레벨 1 통과해따리 프로그래밍 입문자를 위한 쉬운 수준이라고 하지만 평균 점수가 44.4여서 졸고 있었는데, 다행히 아주 손쉽게는 아니고 잠깐 버벅거렸지만, 금방 풀고, 100점으로 통과해따리. 신난다리. 더 많이 공부하고, 프로그래밍 초급자를 위한 기초 수준이라는 레벨 2도 합격해야지~~ 2024. 1. 31.