https://school.programmers.co.kr/learn/courses/30/lessons/12947
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
https://school.programmers.co.kr/learn/courses/30/lessons/12943
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
https://school.programmers.co.kr/learn/courses/30/lessons/12909
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
프로그래머스 1단계 수준의 문제를 풀었다.
언어는 파이썬!
- 문제 1: 하샤드 수
문제 설명: 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
양의 정수 x를 x의 자릿수의 합으로 나눴을 때 나머지가 0이면 된다.
문제를 보자마자 파이썬의 자료형을 바꿔서 자릿수를 표현해야겠다고 생각했다.
int -> str -> list => 각 자리별 숫자가 list에 append되는 것과 같다.
def solution(x):
answer = True
list_x = list(str(x))
sum_x = 0
for i in range(len(list_x)):
sum_x += int(list_x[i])
if x % sum_x != 0:
answer = False
return answer
-문제2: 콜라츠 추측
문제 설명: 1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.
1-1. 입력된 수가 짝수라면 2로 나눕니다.
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.
for문과 if문을 적절히 사용하면 될 것 같다고 판단하여 코드를 작성하였다.
def solution(num):
answer = 0
if num == 1:
answer = 0
for i in range(1,501):
if num % 2 ==0 and num >1:
num = num / 2
answer = i
elif num % 2 != 0 and num >1:
num = num * 3 + 1
answer = i
if num != 1:
answer = -1
return answer
for문에서 조건에 맞게 코드가 수행됐을 때 수행된 만큼(i)을 반환하고 최종num이 1이 아니면 -1을 반환하게 했다.
-문제 3: 올바른 괄호
문제 설명: 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
처음에 그냥 안될 것 같은 조건만 판단해서 False를 반환하면 될 줄 알았다..
#첫시도
def solution(s):
answer = True
s_list = list(s)
if s[0] == ')':
answer = False
else:
if s_list.count('(') != s_list.count(')'):
answer = False
return answer
그런데 다음과 같이 실패한 테스트가 생겼다..
왜 안되는지는 잘 모르겠다..
그래서 보다 직관적인 방식으로 코드를 수정했다.
스택 구조를 이용하여
1. '('가 들어오는 경우
- '(', '(' 와 같이 중복되는 경우
2.')'가 들어오는 경우
- '('가 앞에 있어 ')'가 들어오면 처리되는 경우
로 판단하여 코드를 작성해보았다.
def solution(s):
answer = True
s_stack = []
for v in s:
if v == '(':
s_stack.append(v)
else:
if s_stack == []:
answer = False
else:
s_stack.append(v)
s_stack.pop()
s_stack.pop(-1)
if s_stack != []:
answer = False
return answer
'Programming > Python' 카테고리의 다른 글
연습 문제: 최댓값과 최솟값, 푸드 파이트 대회 (1) | 2023.05.22 |
---|---|
2017 팁스타운: 짝지어 제거하기 / 연습문제: 크기가 작은 부분 문자열, 이상한 문자 만들기 (1) | 2023.05.15 |
연습 문제: 삼총사 / 스택,큐: 같은 숫자는 싫어 (1) | 2023.04.17 |
코딩 테스트 입문: 치킨 쿠폰 / summer,winter coding: 예산 / 연습문제: 문자열 다루기 기본 (2) | 2023.04.13 |
월간 코드 챌린지: 약수의 개수와 덧셈, 내적 / 코딩 테스트 연습: 문자열 계산하기 (1) | 2023.03.24 |