간단한 논리 연산
문제 설명
boolean 변수 x1, x2, x3, x4가 매개변수로 주어질 때, 다음의 식의 true/false를 return 하는 solution 함수를 작성해 주세요.
- (x1 ∨ x2) ∧ (x3 ∨ x4)
- 입출력 예 #1
- 예제 1번의 x1, x2, x3, x4로 식을 계산하면 다음과 같습니다.
- (x1 ∨ x2) ∧ (x3 ∨ x4) ≡ (F ∨ T) ∧ (T ∨ T) ≡ T ∧ T ≡ T
- 따라서 true를 return 합니다.
def solution(x1, x2, x3, x4):
return (x1 or x2) and (x3 or x4)
📌파이썬 논리연산자 알아보기
1. 논리연산이란?
조건문이 참(True) 인지 거짓(False) 인지 판단하는 것을 의미한다.
따라서 and, or, not 연산자의 결과는 Bool (T/ F) 타입으로 반환하여준다.
and, or, not 의 결과는 True 아니면 False 로 나오게 된다.
and
조건 A 와 조건 B가 모두 참이면 참(True)을 반환
즉 둘 중 하나라도 거짓이면 거짓 (False) 를 반환
OR
조건 A와 조건 B 둘 중 하나라도 참(True) 이면 참(True) 를 반환
즉 둘다 False 인 경우에만 False이고 조건 중 하나라도 True 이면 True
NOT
not 조건은 조건을 반대로 해석하
A가 거짓이라면 참(True)를 반환하고
A가 참이라면 거짓(False)를 반환한다.
즉 not True => False / not False => True 를 반환한다
참고자료: https://blockdmask.tistory.com/563
주사위게임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 함수를 작성해 주세요.
접근방법
- Counter을 사용하면 key 가 해당 주사위숫자, value 가 주사위가 나온 빈도 가 된다.
- -> 예를 들어, counter가 Counter({1: 3, 2: 1})이면 values는 [3, 1], keys는 [1, 2]가 된다.
- 따라서.. 네 숫자가 다 같은경우:
- 세 숫자만 같은 경우:
p = keys[values.index(3)]
#values 리스트에서 '3' 이 나타나는 인덱스를 반환한다.
#즉 빈도가 3인 숫자의 인덱스를 찾게된다.
#따라서 해당 인덱스에 있는 숫자를 p에 할당한다.
q = keys[values.index(1)]
전체코드
def solution(a, b, c, d):
from collections import Counter
dice = [a, b, c, d]
counter = Counter(dice)
if len(counter) == 1:
p = a
return 1111 * p
elif len(counter) == 2:
values = list(counter.values())
keys = list(counter.keys())
if 3 in values:
# 세 주사위가 같은 숫자인 경우
p = keys[values.index(3)]
q = keys[values.index(1)]
return (10 * p + q) ** 2
else:
# 두 주사위씩 같은 숫자인 경우
p, q = keys
return (p + q) * abs(p - q)
elif len(counter) == 3:
# 두 주사위만 같은 숫자인 경우
keys = list(counter.keys())
values = list(counter.values())
p = keys[values.index(2)]
q = keys[values.index(1)]
r = keys[values.index(1, values.index(1) + 1)]
return q * r
else:
# 네 주사위가 모두 다른 숫자인 경우
return min(dice)
💡 파이썬 Counter
사실 Counter를 사용하는 방법은 포스팅 했었는데
내가 사용법에 대해서는 확실히 감을 잘 못잡은 것 같아서 다시 포스팅하게되었다 ㅠ.ㅠ
Counter
- Python collections 모듈에 포함된 클래스 중 하나
- 주어진 데이터의 각 요소가 몇번씩 등장했는지를 세는 데 사용된다.
- Counter 생성자는 여러 형태의 데이터를 인자로 받는데 중복된 데이터가 저장된 배열을 인자로 넘기면 각 원소가 몇번씩 나오는지가 저장된 객체를 얻게 된다.
- 딕셔너리 형태: 계산된 결과는 딕셔너리 형태로 저장되며, 각 요소가 키(key)가 되고, 빈도가 값(value)이 된다.
1. Counter 사용하면 딕셔너리형태로 반환
from collections import Counter Counter('hihihilong') #>> 결과: Counter({'h': 3, 'i': 3, 'l': 1, 'o': 1, 'n': 1, 'g': 1})
2. 리스트 요소 세기myname= ['hi','long','hi','long','hi'] Counter(myname) # >> 결과: Counter({'hi': 3, 'long': 2})
3. 리스트 길이도 셀 수 있당
len(Counter(myname)) #>>결과: 2
4. 키와 값을 저장할 수 있다.from collections import Counter myname = ['hi', 'long', 'hi', 'long', 'hi'] counter = Counter(myname) # Counter 객체에서 각 요소의 키와 값을 리스트로 저장 keys = list(counter.keys()) values = list(counter.values()) print(keys) #>>결과: ['hi','long'] print(values) #>>결과: [3,2]
*만약 리스트가 아닌 형태로 key-value 값을 추출한다면이런 형태로 나온다.
이 문제가 레벨0이라는게..믿어지지가않는다...ㅠㅠ 므어허어엉 ㅠㅠ..ㅠㅠ
글자 이어붙여 문자열 만들기
문제설명
문자열 my_string과 정수 배열 index_list가 매개변수로 주어집니다. my_string의 index_list의 원소들에 해당하는 인덱스의 글자들을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
def solution(my_string, index_list):
answer = []
for index in index_list:
answer.append(my_string[index])
return ''.join(answer)
9로 나눈 나머지
음이 아닌 정수를 9로 나눈 나머지는 그 정수의 각 자리 숫자의 합을 9로 나눈 나머지와 같은 것이 알려져 있습니다.
이 사실을 이용하여 음이 아닌 정수가 문자열 number로 주어질 때, 이 정수를 9로 나눈 나머지를 return 하는 solution 함수를 작성해주세요.
def solution(number):
answer=int(number)
return answer%9
길기만 했던 간단한 문제 ㅎㅎ
문자열 여러 번 뒤집기
문자열 my_string과 이차원 정수 배열 queries가 매개변수로 주어집니다. queries의 원소는 [s, e] 형태로, my_string의 인덱스 s부터 인덱스 e까지를 뒤집으라는 의미입니다. my_string에 queries의 명령을 순서대로 처리한 후의 문자열을 return 하는 solution 함수를 작성해 주세요.
접근방법
- 각 쿼리를 순서대로 처리한당
- 각 쿼리 [s, e]에 대해 문자열 my_string의 인덱스 s부터 e까지의 부분 문자열을 추출한다
- 추출한 부분 문자열을 뒤집고, 다시 원래 위치에 놓는다
- 모든 쿼리를 처리한 후의 문자열을 반환
def solution(my_string, queries):
my_string = list(my_string)
for s, e in queries:
my_string[s:e+1] = my_string[s:e+1][::-1]
return ''.join(my_string)
'Algorithm' 카테고리의 다른 글
[Python] 프로그래머스 트레이닝 챌린지 D10 (0) | 2024.08.01 |
---|---|
[Python] 프로그래머스 트레이닝 챌린지 D9 (0) | 2024.07.26 |
[Python] 프로그래머스 트레이닝 챌린지 D7 (2) | 2024.07.23 |
[Python] 프로그래머스 트레이닝 챌린지 D6 (7) | 2024.07.22 |
[Python] 프로그래머스 트레이닝 챌린지 D5 (0) | 2024.07.21 |