본문 바로가기

알고리즘풀이/프로그래머스

[9/21] Lv1.

👉 사용 언어 : PYTHON3

x만큼 간격이 있는 n개의 숫자

✅ Solution

 

def solution(x, n):
    answer = []
    cnt = 0
    while cnt < n:
        answer.append(x+x*cnt)
        cnt+=1
    return answer

 

✅ 반복문

 

1) while 문

 

while 조건:
    본문
    본문

 

2) for 문

 

for 변수 in iterable:
    본문1
    본문2
    ...

 

👉 iterable : 리스트 / 튜플 / 문자열

    ( 첫 번쨰 요소 ~ 마지막 요소 포함 )

 

2-1) range 문

 

range(end) # 0~end-1까지 정수생성
range(start, end) # start부터 end-1까지 정수생성
range(start, end, step) # start부터 end-1까지 정수를 생성하되 step만큼 증가

 

++ enumerate ++

 

t = [1, 5, 32, 14, -1, 23]
for value in enumerate(t):
    print(value)
#(0, 1)
#(1, 5)
#(2, 32)
#(3, 14)
#(4, -1)
#(5, 23)

 

👉 인자로 튜플 / 리스트 / 문자열 받으면 해당 element 가 몇 번째 반복에 해당하는지 나타냄

 

++ break 와 continue ++

👉 break 만나면 순회(반복) 종료

👉 continue 만나면 해당 라운드 넘어가고 다음 라운드 실행

 

✅ 리스트 원소 추가 및 삭제

 

1) 추가

  • append : 리스트 마지막에 원소 추가
  • insert : 원하는 인덱스에 원소 추가 ( .insert(입력할 인덱스, 값) )
  • + 연산자 : 리스트 합치는 경우 ( 순서 고려O )
  • extend : 리스트 합치는 경우 ( .extend(추가할 리스트) )

2) 삭제

  • del : del 리스트명[제거할 원소 인덱스]
  • remove : 해당 원소 값이 리스트에 없을 경우 ValueError 발생 ( .remove(제거할 원소 값) )
  • del + index : remove 와 동일한 효과 ( del 리스트명[리스트.index(제거할 원소 값)] )

서울에서 김서방 찾기

✅ Solution

 

def solution(seoul):
    return '김서방은 ' + str(seoul.index('Kim')) + '에 있다'

 

✅ 다른 사람 풀이 참고

 

return "김서방은 {}에 있다".format(seoul.index('Kim'))

## .format(문자열에 넣고 싶은 변수값) 과 "{}" 통해 문자열을 나타낼 수 있다!

 

✅ String 과 숫자를 동시에 출력할 경우

👉 + 가 아니라 , 를 사용하여 출력한다.

👉 또는 str( ) 및 int( ) 등을 통해 하나의 데이터타입으로 통일한다. 

시저 암호

✅ Solution

 

def solution(s, n):
    answer = ''
    for i in s:
        if (ord('Z') < ord(i)+n and ord(i) < ord('a')) or ord(i)+n > ord('z'):
            i = chr(ord(i)+n-26)
        elif i == ' ':
            i = i
        else:
            i = chr(ord(i)+n)
        answer += i      
    return answer

 

✅ 다른 사람 풀이 참고

 

def caesar(s, n):
    s = list(s)
    for i in range(len(s)):
        if s[i].isupper():
            s[i]=chr((ord(s[i])-ord('A')+ n)%26+ord('A'))
        elif s[i].islower():
            s[i]=chr((ord(s[i])-ord('a')+ n)%26+ord('a'))

    return "".join(s)
    # 주어진 문장을 암호화하여 반환하세요.

 

👉 isupper( ) islower( ) 통해 a-z 와 A-Z 를 나눌 수 있다.

👉 .join( ) 을 통해 리스트 안 문자 원소를 하나의 문자열(String)으로 나타낼 수 있다.

 

✅ 아스키코드

 

 

✅ 아스키코드 ←→ 문자 변환

1) 아스키코드 ← 문자

: ord( )

2) 아스키코드  문자

: chr( )

 

✅ 문자열에 문자 추가 또는 문자열 합치기

👉 + 연산자 사용 !

 

✅ 경우의 수

1) 입력: 대문자 , 출력: 대문자 이후 문자 (특수문자 및 소문자) 

또는  출력: 소문자 이후 ( n <= 25 이므로 입력은 조건을 넣지 않아도 소문자라는 걸 알 수 있다.) 

2) 입력: 대/소문자 , 출력: 대/소문자

3) 입력: 공백 , 출력: 공백

가장 가까운 같은 글자

✅ Solution

 

def solution(s):
    answer = []
    for i in range(0, len(s)):
        cnt = -1
        for j in range(i-1, -1, -1):
            if s[i] == s[j]:
                cnt = i-j
                break
        answer.append(cnt)

    return answer

문자열 내 마음대로 정렬하기

✅ Solution

 

def solution(strings, n):
    answer = []
    dic = {}
    for i in strings:
        dic[i] = i[n]
    dic = sorted(dic.items(), key = lambda x: (x[1], x[0]))
    for item in dic:
        answer.append(item[0])
    return answer

 

✅ 다른 사람 풀이 참고

 

def strange_sort(strings, n):
    '''strings의 문자열들을 n번째 글자를 기준으로 정렬해서 return하세요'''
    return sorted(strings, key=lambda x: x[n])

 

✅ 숫자 및 문자 정렬

 

# 숫자 리스트 정렬
print("1. 숫자 리스트 정렬")
list_num.sort()
print(list_num)

# 문자열 리스트 정렬1 (소문자만)
print("\n2. 소문자 문자열 리스트 정렬")
list_str1.sort()
print(list_str1)

# 문자열 리스트 정렬2 (대/소문자 포함)
print("\n3. 대소문자 문자열 리스트 정렬")
list_str2.sort()
print(list_str2)

 

👉 모두 동일하게 .sort( ) 함수를 사용하여 정렬한다. ( = 사전순 정렬 )

👉 원본 리스트를 변경하지 않고 정렬하려면 sorted(리스트명) 함수를 사용한다.

 

✅ 딕셔너리 정렬

 

 

👉 딕셔너리 { key1 : value1, key2 : value2, ... }

❌ key 값이 중복될 수 없다. 중복되는 값을 추가하면 제일 최근에 추가한 (키, 값) 쌍만 남고 그 전 쌍은 모두 지워진다.

👉 리스트 [ value1, value2, ... ]  _  값 변경 가능

👉 튜플 ( value1, value2, ... )  _  값 변경 불가능

제일 작은 수 제거하기

제한 조건

  • arr은 길이 1 이상인 배열입니다.
  • 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.

✅ Solution

 

def solution(arr):
    answer = []
    sortedArr = sorted(arr)
    for i in arr:
        if i != sortedArr[0]:
            answer.append(i)
        else:
            continue
    if len(answer) == 0:
        answer.append(-1)
    return answer

 

✅ 다른 사람 풀이 참고

 

def rm_small(mylist):
    # 함수를 완성하세요
    return [i for i in mylist if i > min(mylist)]

 

👉 min( ) 사용할 생각을 못함... 역시 api 많이 공부해놔야 편하다!

( max( ) ,  sum( ) ,  avg( ) ,  ... )

👉 위의 다른 사람 풀이 코드에서 return 문 다시 이해가 필요할 것 같다.

'알고리즘풀이 > 프로그래머스' 카테고리의 다른 글

[11/16] Lv1.  (0) 2023.11.10
[11/8] Lv1.  (0) 2023.11.04
[10/31] Lv1.  (0) 2023.11.01
[10/22] Lv1.  (0) 2023.10.19
[9/30] Lv1.  (0) 2023.09.27