본문 바로가기
알고리즘 문제풀이/프로그래머스 Lv0

[프로그래머스] 코딩 기초 트레이닝

by summer_light 2023. 5. 22.

#모든 원소들의 곱은 함수가 없기 때문에 직접 구해야 한다.
#다른 사람은 m = eval( )을 이용해서 문자열 수식을 만든 다음에 계산했다.

[내 풀이] 
def solution(num_list):
    gob = 1
    for x in num_list:
        gob = gob*x
    hob = sum(num_list)
    return 1 if gob < hob**2 else 0

[참고 풀이]
def solution(num_list):
    s=sum(num_list)**2
    m=eval('*'.join([str(n) for n in num_list]))
    return 1 if s>m else 0

[내 풀이]
def solution(my_string, is_prefix):
    return int(my_string[:len(is_prefix)]==is_prefix)

[참고 풀이]
- startswith 라는 함수가 있다. *endswith라는 함수도 있다.
def solution(my_string, is_prefix):
    return int(my_string.startswith(is_prefix))

[내 풀이]
def solution(myString, pat):
    replaced = ""
    for x in myString:
        if x == "A":
            replaced += "B"
        else:
            replaced += "A"

    return int(pat in replaced)


[참고 풀이]
- 임시 변수인 C를 도입해서 두 번 바뀌게 되는 현상을 방지 (replace만 사용)
- myString 보다 pat이 더 짧기 때문에 myString 보다 pat을 replace 해서 체크 하는 것이 더 효율적일 수도 있다는 의견(문제의 취지와는 다르지만, 결과는 같다)
def solution(myString, pat):
    return int(pat in myString.replace('A', 'C').replace('B', 'A').replace('C', 'B'))

[내 풀이]
def solution(num_list):
    odd = 0
    even = 0
    for i, x in enumerate(num_list):
        if i%2 == 0:
            odd += x
        else:
            even += x
    return max(odd, even)

[참고 풀이]
- 리스트 규칙적으로 추출하기 : 슬라이싱 step 활용하기 
def solution(num_list):
    return max(sum(num_list[0: len(num_list): 2]), sum(num_list[1: len(num_list): 2]))

[내 풀이]
def solution(myString):
    return ''.join("l" if x<"l" else x for x in myString)

[참고 풀이]
- 문자열 translate(table), table = str.maketrans(문자열1, 문자열2) 사용 
def solution(myString):
    return myString.translate(str.maketrans('abcdefghijk', 'lllllllllll'))

* 문자열 translate(table), table = str.maketrans(문자열1, 문자열2) 사용 

hi = "Hello, World!"
table = str.maketrans('HWd', '123')
hi.translate(table)

 

[내 풀이]
- 0이 아닌 값이 나올때까지 for 루프를 돌려, 0이 아닌 값이 나오는 인덱스를 찾아 슬라이싱 하는 풀이 
def solution(n_str):
    for i in range(len(n_str)):
        if n_str[i] != '0':
            return n_str[i:]

[참고 풀이1]
- 문자열의 왼쪽에서 특정 값을 제거할 때: lstrip('문자') 함수 활용
def solution(n_str):
    return n_str.lstrip('0')

[참고 풀이2]
- 떼야 할 값이 0인 것을 이용한 특수한 풀이
def solution(n_str):
    return str(int(n_str))

[내 풀이]
def solution(arr, idx):
    for i, x in enumerate(arr):
        if i>=idx and x==1:  return i
    return -1

[참고 풀이]
- try-except: 구문 try에서 예외가 발생하면 except가 실행됨
- index(찾을 값, 시작 인덱스): 두번 째 인자는 시작 인덱스구나.
def solution(arr, idx):
    try:
        answer = arr.index(1, idx)
    except:
        answer = -1
    return answer

[내 풀이]
def solution(arr):
    for i in range(len(arr)):
        for j in range(len(arr[i])):
            if arr[i][j] != arr[j][i]:
                return 0
    else:
        return 1

[참고 풀이]
- 모든 조건을 만족하는지 all()
- 하나라도 조건을 만족하는지 any() 
def solution(arr):
    return int(all(arr[i][j] == arr[j][i] for i in range(len(arr)) for j in range(len(arr))))

[내 풀이]
- split('x'): x 기준으로 나누기 때문에 xx 같이 나란히 나오면, x, '', x 로 인식해서 ''도 추가된다.
def solution(myString):
    return sorted([x for x in myString.split('x') if x != ''])

[내 풀이]
- 이중 for문
def solution(n):
    answer = []
    for i in range(n):
        row = []
        for j in range(n):
            if i==j:
                row.append(1)
            else:
                row.append(0)
        answer.append(row)
    return answer

[참고 풀이]
- 리스트 컴프리헨션 안의 리스트 컴프리헨션
def solution(n):
    return [[int(i==j) for i in range(n)] for j in range(n)]

[참고 풀이2]
- 초기화 한 번만 하고, 특정 값만 수정하는 방식 (이게 더 빠르다.)
def solution(n):
    answer=[[0]*n for i in range(n)]
    for i in range(n): answer[i][i]=1
    return answer

 

파이썬 논리연산 : and, or 

댓글