word = input().upper() # 입력 단어
unique_word = list(set(word)) # 입력된 문자의 중복을 제거한 후 리스트 형으로 변환

cnt = [] # 각 문자의 개수를 담을 리스트

for i in unique_word:
  cnt.append(word.count(i)) # word 안 문자의 개수를 구함
  
if cnt.count(max(cnt)) > 1: # 제일 많이 사용된 알파벳의 갯수가 중복되면
  print('?') # ? 출력
else: # 제일 많이 사용된 알파벳의 갯수가 중복되지 않으면
  print(unique_word[cnt.index(max(cnt))]) # 최댓값의 인덱스를 구한 후 word_list 인덱스 번호로 대입해서 출력
# word_list와 cnt의 인덱스는 매칭되는 관계임

반복문에서 unique_word를 순회하면서 cnt에 개수를 담았으므로 두 리스트 인덱스 관계를 생각해서 풀었다.

cnt의 최댓값의 인덱스 번호를 가지고 unique_word의 인덱스 번호에 대입하면 해당 인덱스의 값인 알파벳이 나온다.

해당 알파벳이 최대로 사용된 알파벳인 것

개헷갈린다 하

'코테 > 백준' 카테고리의 다른 글

백준 10816 숫자 카드 2 - 파이썬  (0) 2024.06.25
백준 1920 수 찾기 - 파이썬  (0) 2024.06.25
백준 11399번 ATM - 파이썬  (0) 2024.06.25
백준 11047 동전 0 - 파이썬  (0) 2024.06.25
백준 1931 회의실 배정 : 파이썬  (0) 2024.06.25
def solution(a, b):
    return sum([a[i]*b[i] for i in range(len(a))])
  • 두 배열은 길이가 같다고 했기 때문에 리스트를 순회할 때, 어떤 리스트의 길이를 사용하든 상관은 없다.(난 a의 길이를 사용했다.)
  • 각 리스트에 대응되는 요소끼리 곱한 후 반환된 리스트의 값들을 sum 함수를 사용해 전부 더한다.

https://school.programmers.co.kr/learn/courses/30/lessons/70128

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

'코테 > 프로그래머스' 카테고리의 다른 글

약수의 합 - python  (0) 2024.04.16
제일 작은 수 제거하기 - python  (0) 2024.04.16
시저 암호 - python  (0) 2024.04.16
def solution(n):
    sum = 0
    for i in range(1, n+1):
        if n % i == 0:
            sum += i
    return sum

 

  • n을 어떤 수로 나누었을 때, 나머지가 0이라면, 어떤 수는 n의 약수
  • 약수의 조건을 만족하는 수를 sum에 더한 후 반환
def solution(n): 
	return sum([i for i in range(1, n+1) if n % i == 0])

 

  • 짧은 코드들은 리스트 컴프리헨션으로 표현하는 것이 깔끔한 것 같다.
약수의 조건
"나머지가 0일 때"
주어진 수를 다른 수로 나누었을 때, 그 나머지가 0이 되어야 함.

https://school.programmers.co.kr/learn/courses/30/lessons/12928

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

'코테 > 프로그래머스' 카테고리의 다른 글

내적 - python  (0) 2024.04.17
제일 작은 수 제거하기 - python  (0) 2024.04.16
시저 암호 - python  (0) 2024.04.16
def solution(arr):
    if len(arr) == 1:
        return [-1]
    minV = min(arr)
    return [i for i in arr if minV != i]
  • 길이가 1이면 [-1] 반환
  • min함수로 최솟값을 찾아 냄
  • arr를 순회하면서 최솟값이 아닌 요소로 이루어진 새로운 배열로 만들어서 반환!

https://school.programmers.co.kr/learn/courses/30/lessons/12935

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

'코테 > 프로그래머스' 카테고리의 다른 글

내적 - python  (0) 2024.04.17
약수의 합 - python  (0) 2024.04.16
시저 암호 - python  (0) 2024.04.16
def solution(s, n):
    answer = ''
    for i in list(s):
      if i == ' ': answer += ' '
      elif 'a' <= i <= 'z':
        if ord('z') < ord(i) + n:
          answer += chr(ord(i) + n - 26)
        else:
          answer += chr(ord(i)+n)
      else:
        if ord('Z') < ord(i) + n:
          answer += chr(ord(i) + n -26)
        else:
          answer += chr(ord(i) + n)
    return answer
  • 공백일 땐 그대로 공백 처리를 해준다.
  • 알파벳+n을 했을 때, 'z'를 넘어간다면 다시 알파벳의 시작으로 돌아가게 한다.
    • 알파벳은 26개 >> 즉,  -26을 해줌으로써 a로 돌아가도록 설정
    • 아닐 경우 그대로 더한 후 변환

파이썬에서 ord()와 chr() 함수는 문자와 해당 문자의 아스키 코드 값을 변환하는 데 사용

  1. ord() 함수:
    • ord('a')는 문자 'a'의 아스키 코드 값인 97을 반환
  2. chr() 함수:
    • chr(97)은 아스키 코드 값이 97인 문자(a)를 반환 >> 이는 소문자 'a'를 의미

https://school.programmers.co.kr/learn/courses/30/lessons/12926

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

'코테 > 프로그래머스' 카테고리의 다른 글

내적 - python  (0) 2024.04.17
약수의 합 - python  (0) 2024.04.16
제일 작은 수 제거하기 - python  (0) 2024.04.16

Day25 이차원 리스트(배열)

  • 정수를 나선형으로 배치하기
  • 특별한 이차원 배열 2
  • 정사각형으로 만들기
  • 이차원 배열 대각선 순회하기

정수를 나선형으로 배치하기

문제 설명

양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.
def solution(n):
    answer = [[None for j in range(n)] for i in range(n)]
    move = [[0, 1], [1, 0], [0, -1], [-1, 0]]
    x, y, m = 0, 0, 0
    for i in range(1, n**2 + 1):
        answer[y][x] = i
        if y + move[m][0] >= n or x + move[m][1] >= n or answer[y + move[m][0]][x + move[m][1]]:
            m = (m + 1) % len(move)
        y, x = y + move[m][0], x + move[m][1]
    return answer

 

이 문제는 도저히 혼자 힘으로 풀 수가 없어서,, 도움을 .. 받았다

move에 이동할 좌표를 담음, 순서는 우>하>좌>상 

처음에 아래로 이동하는데 y좌표가 왜 +1인가 했는데

값 기준이 아니라 인덱스 기준으로 움직이니까 아래로 갈 때 +1 위로 갈때 -1이다.

move[m][0] > 0번째 인덱스는 항상 y 좌표 (0 or -1 or +1)

move[m][1] > 1번째 인덱스는 항상 x 좌표 (0 or -1 or +1)

 

move값으로 방향에 따라 이동하다 값이 n보다 커지면 방향을 바꿈(m값 변경)

m은 방향 맨처음 m=0 우로 이동 > m=1 하 > m=2 좌 m=3 상

 

아~~~~~~~~~~ 어렵다 큰일났다


특별한 이차원 배열 2

문제 설명

n × n 크기의 이차원 배열 arr이 매개변수로 주어질 때, arr이 다음을 만족하면 1을 아니라면 0을 return 하는 solution 함수를 작성해 주세요.

0 ≤ i, j < n인 정수 i, j에 대하여 arr[i][j] = arr[j][i]

 

def solution(arr):
    answer = 0
    length = len(arr[0])

    for i in range(length):
        for j in range(length):
            if arr[i][j] == arr[j][i]:
                continue
            else:
                return 0

    return 1

정사각형으로 만들기

문제 설명

이차원 정수 배열 arr이 매개변수로 주어집니다. arr의 행의 수가 더 많다면 열의 수가 행의 수와 같아지도록 각 행의 끝에 0을 추가하고, 열의 수가 더 많다면 행의 수가 열의 수와 같아지도록 각 열의 끝에 0을 추가한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.

 

def solution(arr):
    arrLen = len(arr)
    arrarrLen = len(arr[0])
    gap = arrLen-arrarrLen

    if len(arr) == len(arr[0]):
        return arr
    elif len(arr) > len(arr[0]):
        for i in range(len(arr)):
            for _ in range(gap):
                arr[i].append(0)
    else:
        for _ in range(abs(gap)):
            arr.append([0]*arrarrLen)

    return arr

행 길이가 더 길면 열에 행-열 차이만큼 0 추가하기

열 길이가 더 길면 0으로 채워진 열 길이만큼의 배열을 행에 추가하기

 

어렵다 .....그래두 풀었다 ....


이차원 배열 대각선 순회하기

문제 설명

2차원 정수 배열 board와 정수 k가 주어집니다.i + j <= k를 만족하는 모든 (i, j)에 대한 board[i][j]의 합을 return 하는 solution 함수를 완성해 주세요.

 

def solution(board, k):
    answer = 0
    for i in range(len(board)):
        for j in range(len(board[0])):
            if i + j <= k:
                answer += board[i][j]

    return answer

이중 포문으로 이차원 배열 반복 인덱스 i+j가 k보다 작을때, 해당 인덱스의 값을 answer에 계속 더함

 

손으로 먼저 다 풀고 코드치는게 훨씬 머리 잘 돌아가고 빠르다.

점점 더 어려워지면 먼저 코드칠 생각은 꿈에도 못하겠지 ...


마지막 날이라고 갑자기 난이도가 확 ㅠㅠ 뛰어버린 ... 이것저것 하다가 4문제 이틀이 되어서야 다 풀어버린. ..!!

그래도 다 풀었다 기초 트레이닝 문제 25일차까지 완 !!!! 뿌듯 .... 

 

쉬운 문제도 많았지만 애매하게 헷갈리는 문제들도 많았어서 딱 기초 감잡기에 좋은 코스인 것 같다

대충 감은 잡았으니 이제 알고리즘 차근차근 공부하면서 주제 별로 문제 푸는 연습도 해봐야겠다

밀린 날도 며칠 있었지만 그래도 매일 풀려고 했고 반정도는 성공한듯? 수고했따 더 열심히 하렴

Day24 조건문 활용, 반복문 활용, 이차원 리스트(배열)

  • 커피 심부름
  • 그림 확대
  • 조건에 맞게 수열 변환하기 3
  • l로 만들기
  • 특별한 2차원 배열 1

커피 심부름

문제 설명

팀의 막내인 철수는 아메리카노와 카페 라테만 판매하는 카페에서 팀원들의 커피를 사려고 합니다. 아메리카노와 카페 라테의 가격은 차가운 것과 뜨거운 것 상관없이 각각 4500, 5000원입니다. 각 팀원에게 마실 메뉴를 적어달라고 하였고, 그 중에서 메뉴만 적은 팀원의 것은 차가운 것으로 통일하고 "아무거나"를 적은 팀원의 것은 차가운 아메리카노로 통일하기로 하였습니다.각 직원이 적은 메뉴가 문자열 배열 order로 주어질 때, 카페에서 결제하게 될 금액을 return 하는 solution 함수를 작성해주세요. order의 원소는 아래의 것들만 들어오고, 각각의 의미는 다음과 같습니다.

 

def solution(order):
    answer = 0
    
    for i in order:
        if "latte" in i:
            answer += 5000 
        else:
            answer += 4500
    
    return answer

아이스든 핫이든 상관없이 아메리카노, 아무거나 = 4500 / 라떼 5000

 

이름에 latte 들어가면 +5000원 나머지 +4500


그림 확대

문제 설명

직사각형 형태의 그림 파일이 있고, 이 그림 파일은 1 × 1 크기의 정사각형 크기의 픽셀로 이루어져 있습니다. 이 그림 파일을 나타낸 문자열 배열 picture과 정수 k가 매개변수로 주어질 때, 이 그림 파일을 가로 세로로 k배 늘린 그림 파일을 나타내도록 문자열 배열을 return 하는 solution 함수를 작성해 주세요.

def solution(picture, k):
    answer = []
    for i in picture:
        temp = ''
        
        for j in i:
            temp += j * k
            
        for _ in range(k):
            answer.append(temp)
    return answer

temp에 (문자 * k) 담고 (가로 k배 확대)

temp를 k배 곱한 문자열을 answer에 담는다 (세로 k배대)


조건에 맞게 수열 변환하기 3

문제 설명

정수 배열 arr와 자연수 k가 주어집니다.만약 k가 홀수라면 arr의 모든 원소에 k를 곱하고, k가 짝수라면 arr의 모든 원소에 k를 더합니다.이러한 변환을 마친 후의 arr를 return 하는 solution 함수를 완성해 주세요.

 

def solution(arr, k):
    return  [i * k if k % 2 == 1 else i + k for i in arr ]

k 홀수면, k % 2 == 1 , 모든 arr 원소 * k

k 짝수면 , 모든 arr 원소 + k


l로 만들기

문제 설명

알파벳 소문자로 이루어진 문자열 myString이 주어집니다. 알파벳 순서에서 "l"보다 앞서는 모든 문자를 "l"로 바꾼 문자열을 return 하는 solution 함수를 완성해 주세요.

 

def solution(myString):
    for i in myString:
        if ord(i) < ord('l'):
            myString = myString.replace(i, 'l')
    return myString

replace가 문자열 자체는 변경하지 않으며 바뀐 결과를 반환하기 때문에 바뀐 결과를 유지하고 싶다면 할당해줘야 한다.

할당하지 않고 replace만 썼다가 생각대로 안돼서 오잉.. 함

다른 사람 풀이 보니 굳이 ord로 변환하지 않고 비교해도 된다.

def solution(myString):
    for i in myString:
        if i < 'l':
            myString = myString.replace(i, 'l')
    return myString​

 

아님 그냥 이렇게 깡으로 바꿔버리는 것도 .. 나름 신박한 풀이인듯?

def solution(myString):
    return myString.translate(str.maketrans('abcdefghijk', 'lllllllllll'))

ㅋㅋㅋㅋㅋㅋㅋ


특별한 이차원 배열 1

문제 설명

정수 n이 매개변수로 주어질 때, 다음과 같은 n × n 크기의 이차원 배열 arr를 return 하는 solution 함수를 작성해 주세요.

arr[i][j] (0 ≤ i, j < n)의 값은 i = j라면 1, 아니라면 0입니다.

 

def solution(n):
    answer = [[0]*n for _ in range(n)]

    for i in range(n):
        for j in range(n):
            if i == j:
                answer[i][j] = 1
    return answer

계속 안되길래 애꿏은 포문만 건드렸느데 문제는 배열 정의였다 ..
answer = [[0]*n]*n < 이렇게 했는데 모든 행이 동일한 객체를 참조하고 있어서 계속 틀렸던 ..

그리고 포문을 두번이나 쓸 필요도 없었다 ^^

def solution(n):
    answer = [[0]*n for _ in range(n)]
    
    for i in range(n):
        answer[i][i] = 1
    return answer

이차원 배열 자주 안 다루다 보니 .. 헷갈리네


오 그래도 내일 마지막

Day23 조건문 활용

  • 부분 문자열
  • 꼬리 문자열
  • 정수 찾기
  • 주사위 게임 1
  • 날짜 비교하기

부분 문자열

문제 설명

어떤 문자열 A가 다른 문자열 B안에 속하면 A를 B의 부분 문자열이라고 합니다. 예를 들어 문자열 "abc"는 문자열 "aabcc"의 부분 문자열입니다.문자열 str1과 str2가 주어질 때, str1이 str2의 부분 문자열이라면 1을 부분 문자열이 아니라면 0을 return하도록 solution 함수를 완성해주세요.

 

def solution(str1, str2):
    return int(str1 in str2)

꼬리 문자열

문제 설명

문자열들이 담긴 리스트가 주어졌을 때, 모든 문자열들을 순서대로 합친 문자열을 꼬리 문자열이라고 합니다. 꼬리 문자열을 만들 때 특정 문자열을 포함한 문자열은 제외시키려고 합니다. 예를 들어 문자열 리스트 ["abc", "def", "ghi"]가 있고 문자열 "ef"를 포함한 문자열은 제외하고 꼬리 문자열을 만들면 "abcghi"가 됩니다.
문자열 리스트 str_list와 제외하려는 문자열 ex가 주어질 때, str_list에서 ex를 포함한 문자열을 제외하고 만든 꼬리 문자열을 return하도록 solution 함수를 완성해주세요.

 

def solution(str_list, ex):
    return ''.join([i for i in str_list if ex not in i])

정수 찾기

문제 설명

정수 리스트 num_list와 찾으려는 정수 n이 주어질 때, num_list안에 n이 있으면 1을 없으면 0을 return하도록 solution 함수를 완성해주세요.

 

def solution(num_list, n):
    return int(n in num_list)

주사위 게임 1

문제 설명

1부터 6까지 숫자가 적힌 주사위가 두 개 있습니다. 두 주사위를 굴렸을 때 나온 숫자를 각각 a, b라고 했을 때 얻는 점수는 다음과 같습니다.

a와 b가 모두 홀수라면 a2 + b2 점을 얻습니다.
a와 b 중 하나만 홀수라면 2 × (a + b) 점을 얻습니다.
a와 b 모두 홀수가 아니라면 |a - b| 점을 얻습니다.

두 정수 a와 b가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.

 

def solution(a, b):
    oddA = a % 2 == 1
    oddB = b % 2 == 1

    if oddA and oddB: return a**2 + b**2
    elif oddA or oddB: return 2 * (a + b)
    else: return abs(a-b)

날짜 비교하기

문제 설명

정수 배열 date1과 date2가 주어집니다. 두 배열은 각각 날짜를 나타내며 [year, month, day] 꼴로 주어집니다. 각 배열에서 year는 연도를, month는 월을, day는 날짜를 나타냅니다.만약 date1이 date2보다 앞서는 날짜라면 1을, 아니면 0을 return 하는 solution 함수를 완성해 주세요.
def solution(date1, date2):
    for i in range(3):
        if date1[i] < date2[i]:return 1
        elif date2[i] < date1[i]: return 0
    return 0
def solution(date1, date2):
    return int(date1 < date2)

아 .. 이게되네

Day22 함수(메서드), 조건문 활용

  • 0 떼기
  • 두 수의 합
  • 문자열로 변환
  • 배열의 원소 삭제하기
  • 부분 문자열인지 확인하기

0 떼기

문제 설명

정수로 이루어진 문자열 n_str이 주어질 때, n_str의 가장 왼쪽에 처음으로 등장하는 0들을 뗀 문자열을 return하도록 solution 함수를 완성해주세요.

 

def solution(n_str):
    return str(int(n_str))

 


두 수의 합

문제 설명

0 이상의 두 정수가 문자열 a, b로 주어질 때, a + b의 값을 문자열로 return 하는 solution 함수를 작성해 주세요.

 

def solution(a, b):
    return str(int(a) + int(b))

문자열로 변환

문제 설명

정수 n이 주어질 때, n을 문자열로 변환하여 return하도록 solution 함수를 완성해주세요.

 

def solution(n):
    return str(n)

배열의 원소 삭제하기

문제 설명

정수 배열 arr과 delete_list가 있습니다. arr의 원소 중 delete_list의 원소를 모두 삭제하고 남은 원소들은 기존의 arr에 있던 순서를 유지한 배열을 return 하는 solution 함수를 작성해 주세요.

 

def solution(arr, delete_list):
    answer = []
    for i in arr:
        if i not in delete_list:
            answer.append(i)
    return answer
def solution(arr, delete_list):   
    return [i for i in arr if i not in delete_list]

거의 동일한 코드인데 리스트 컴프리헨션을 사용하여 간편하게


부분 문자열인지 확인하기

문제 설명

부분 문자열이란 문자열에서 연속된 일부분에 해당하는 문자열을 의미합니다. 예를 들어, 문자열 "ana", "ban", "anana", "banana", "n"는 모두 문자열 "banana"의 부분 문자열이지만, "aaa", "bnana", "wxyz"는 모두 "banana"의 부분 문자열이 아닙니다.문자열 my_string과 target이 매개변수로 주어질 때, target이 문자열 my_string의 부분 문자열이라면 1을, 아니라면 0을 return 하는 solution 함수를 작성해 주세요.

def solution(my_string, target):
    return 1 if target in my_string else 0

 

Day21 함수(메서드)

  • 뒤에서 5등 위로
  • 전국 대회 선발 고사
  • 정수 부분
  • 문자열 정수의 합
  • 문자열을 정수로 변환하기

뒤에서 5등 위로

문제 설명

정수로 이루어진 리스트 num_list가 주어집니다. num_list에서 가장 작은 5개의 수를 제외한 수들을 오름차순으로 담은 리스트를 return하도록 solution 함수를 완성해주세요.

 

def solution(num_list):
    return sorted(num_list)[5:]

 


전국 대회 선발 고사

문제 설명

0번부터 n - 1번까지 n명의 학생 중 3명을 선발하는 전국 대회 선발 고사를 보았습니다. 등수가 높은 3명을 선발해야 하지만, 개인 사정으로 전국 대회에 참여하지 못하는 학생들이 있어 참여가 가능한 학생 중 등수가 높은 3명을 선발하기로 했습니다.
각 학생들의 선발 고사 등수를 담은 정수 배열 rank와 전국 대회 참여 가능 여부가 담긴 boolean 배열 attendance가 매개변수로 주어집니다. 전국 대회에 선발된 학생 번호들을 등수가 높은 순서대로 각각 a, b, c번이라고 할 때 10000 × a + 100 × b + c를 return 하는 solution 함수를 작성해 주세요.

 

def solution(rank, attendance):
    answer = 0
    res = [rank[idx] for idx, value in enumerate(attendance) if value == True]
    res = sorted(res)[:3]
    answer = rank.index(res[0]) * 10000 + rank.index(res[1]) * 100 + rank.index(res[2])
    return answer

 


정수 부분

문제 설명

실수 flo가 매개 변수로 주어질 때, flo의 정수 부분을 return하도록 solution 함수를 완성해주세요.

 

def solution(flo):
    return int(flo)

문자열 정수의 합

문제 설명

한 자리 정수로 이루어진 문자열 num_str이 주어질 때, 각 자리수의 합을 return하도록 solution 함수를 완성해주세요.

 

def solution(num_str):
    return eval('+'.join([i for i in num_str]))

eval 함수는 만능인 것 같다. 정석으로 풀자면

def solution(num_str):
    answer = 0
    for i in num_str:
        answer += int(i)
    return answer

 


문자열을 정수로 변환하기

문제 설명

숫자로만 이루어진 문자열 n_str이 주어질 때, n_str을 정수로 변환하여 return하도록 solution 함수를 완성해주세요.

 

def solution(n_str):
    return int(n_str)

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ ???????????


 

+ Recent posts