[코테준비]프로그래머스 코딩 기초 트레이닝 DAY8 Python <조건문, 문자열>
https://school.programmers.co.kr/learn/challenges/training?order=acceptance_desc&languages=python3
코딩 기초 트레이닝 | 프로그래머스 스쿨
프로그래밍 언어를 처음 접하거나 프로그래밍 언어에 익숙해지고 싶다면? 코딩 역량을 탄탄하게 길러주는 코딩 기초 트레이닝으로 차근차근 코딩에 대한 기초 감각을 길러 보세요.
school.programmers.co.kr
프로그래머스 코딩 기초 트레이닝 연습풀이입니다. 모든 문제의 저작권은 프로그래머스에게 있으며 문제가 됐을 시 삭제하겠습니다.
DAY8 조건문 문자열
간단한 논리 연산
문제설명
boolean 변수 x1, x2, x3, x4가 매개변수로 주어질 때, 다음의 식의 true/false를 return 하는 solution 함수를 작성해 주세요.
- (x1 ∨ x2) ∧ (x3 ∨ x4) ≡ (F ∨ T) ∧ (T ∨ T) ≡ T ∧ T ≡ T
- (x1 ∨ x2) ∧ (x3 ∨ x4) ≡ (T ∨ F) ∧ (F ∨ F) ≡ T ∧ F ≡ F
슈도코드
x1, x2, x3, x4는 그냥 입력값이고 v 랑 ^가 뭔지만 알면됨. 입출력 예시를 보면 v는 or ^ and 인걸 알 수 있음
전체코드
def solution(x1, x2, x3, x4):
return (x1 or x2) and (x3 or x4)
주사위 게임3
문제설명
1부터 6까지 숫자가 적힌 주사위가 네 개 있습니다. 네 주사위를 굴렸을 때 나온 숫자에 따라 다음과 같은 점수를 얻습니다.
- 네 주사위에서 나온 숫자가 모두 p로 같다면 1111 × p점을 얻습니다.
- 세 주사위에서 나온 숫자가 p로 같고 나머지 다른 주사위에서 나온 숫자가 q(p ≠ q)라면 (10 × p + q)2 점을 얻습니다.
- 주사위가 두 개씩 같은 값이 나오고, 나온 숫자를 각각 p, q(p ≠ q)라고 한다면 (p + q) × |p - q|점을 얻습니다.
- 어느 두 주사위에서 나온 숫자가 p로 같고 나머지 두 주사위에서 나온 숫자가 각각 p와 다른 q, r(q ≠ r)이라면 q × r점을 얻습니다.
- 네 주사위에 적힌 숫자가 모두 다르다면 나온 숫자 중 가장 작은 숫자 만큼의 점수를 얻습니다.
네 주사위를 굴렸을 때 나온 숫자가 정수 매개변수 a, b, c, d로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.
슈도코드
처음에는 조건을(if~elif~else) 다 해볼까 생각했는데 2,3번째 조건을 하면서 너무 많아져서 방법을 바꿨다
nums 배열을 만들고 counts를 샌다. nums.count는 i가 배열안에 몇번 있는지 찾는것
그렇게 해서 max count=4 일때 / max count=3일 때 / max count=2일때 나눔
그 다음 조건. max(count)==3 가장 많이 등장하는 숫자의 개수가 3개면, 숫자 3개가 같고 하나가 다른 경우임.
cunts.index(3)을 사용해서 counts 리스트에서 값이 3인 원소인 인덱스를 찾는 것. 그래서 p/q에 따로 저장하고 연산 반환
전체코드
def solution(a, b, c, d):
nums = [a, b, c, d]
counts = [nums.count(i) for i in nums]
if max(counts) == 4:
return a * 1111
elif max(counts) == 3:
p = nums[counts.index(3)]
q = nums[counts.index(1)]
return (10 * p + q) ** 2
elif max(counts) == 2:
if min(counts) == 2:
return (a + c) * abs(a - c) if a == b else (a + b) * abs(a - b)
else:
p = nums[counts.index(2)]
return (a * b * c * d) / p**2
else:
return min(nums)
글자 이어 붙여 문자열 만들기
문제설명
문자열 my_string과 정수 배열 index_list가 매개변수로 주어집니다. my_string의 index_list의 원소들에 해당하는 인덱스의 글자들을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
입출력
my_string index_list result
"cvsgiorszzzmrpaqpe" | [16, 6, 5, 3, 12, 14, 11, 11, 17, 12, 7] | "programmers" |
"zpiaz" | [1, 2, 0, 0, 3] | "pizza" |
슈도코드
index_list 배열에서 반복문을 돌려서 그 값을 my_string index로 넣기
전체코드
def solution(my_string, index_list):
answer = ''
for index in index_list:
answer += my_string[index]
return answer
9로 나눈 나머지
문제 설명
음이 아닌 정수를 9로 나눈 나머지는 그 정수의 각 자리 숫자의 합을 9로 나눈 나머지와 같은 것이 알려져 있습니다.
이 사실을 이용하여 음이 아닌 정수가 문자열 number로 주어질 때, 이 정수를 9로 나눈 나머지를 return 하는 solution 함수를 작성해주세요
슈도코드
%연산자 사용
전체코드
def solution(number):
num_str = str(number)
answer = 0
for i in num_str:
answer += int(i)
answer %=9
return answer
int로 바꿔주는 거 필수.. 처음에 안바꿔줘서 틀려버림
문자열 여러번 뒤집기
문제 설명
문자열 my_string과 이차원 정수 배열 queries가 매개변수로 주어집니다. queries의 원소는 [s, e] 형태로, my_string의 인덱스 s부터 인덱스 e까지를 뒤집으라는 의미입니다. my_string에 queries의 명령을 순서대로 처리한 후의 문자열을 return 하는 solution 함수를 작성해 주세요.
입출력예시
예제 1번의 my_string은 "rermgorpsam"이고 주어진 queries를 순서대로 처리하면 다음과 같습니다.
queries my_string
"rermgorpsam" | |
[2, 3] | "remrgorpsam" |
[0, 7] | "progrmersam" |
[5, 9] | "prograsremm" |
[6, 10] | "programmers" |
따라서 "programmers"를 return 합니다.
슈도코드
quries 요소를 for 문 돌려서 시작점 끝점 잡기. 둘이 뒤집은 명령어는 my_string[start:end+1][::-1] 요롷게 사용
전체코드
def solution(my_string, queries):
for query in queries:
start=query[0]
end =query[1]
my_string = my_string[:start] + my_string[start:end+1][::-1] + my_string[end+1:]
return my_string