코드카타
- 문자열 내 마음대로 정렬하기
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
- 제한 조건
strings는 길이 1 이상, 50이하인 배열입니다.
strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
모든 strings의 원소의 길이는 n보다 큽니다.
인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
- 풀이(실패)
def solution(strings, n):
answer = sorted(strings, key=lambda x:x[n])
return answer
sorted를 하면 될 것 같아서 찾아보다가 sorted와 lambda를 같이 사용한 예제 발견
lambda를 익숙해져야하니 사용해보았는데 테스트1은 통과했지만 테스트2가 실패
n번째 글자 순으로 정렬은 됐지만 중복인 경우 사전순으로 정렬해야 하는데 거기서 막힘
- 풀이(통과)
def solution(strings, n):
strings.sort()
answer = sorted(strings, key=lambda x:x[n])
return answer
strings 자체를 정렬해주고 다시 돌리니까 모두 통과함
프로그래머스 코딩 테스트 입문
- 문제
덧셈, 뺄셈 수식들이 'X [연산자] Y = Z' 형태로 들어있는 문자열 배열 quiz가 매개변수로 주어집니다. 수식이 옳다면 "O"를 틀리다면 "X"를 순서대로 담은 배열을 return하도록 solution 함수를 완성해주세요.
- 제한 사항
연산 기호와 숫자 사이는 항상 하나의 공백이 존재합니다. 단 음수를 표시하는 마이너스 기호와 숫자 사이에는 공백이 존재하지 않습니다.
1 ≤ quiz의 길이 ≤ 10
X, Y, Z는 각각 0부터 9까지 숫자로 이루어진 정수를 의미하며, 각 숫자의 맨 앞에 마이너스 기호가 하나 있을 수 있고 이는 음수를 의미합니다.
X, Y, Z는 0을 제외하고는 0으로 시작하지 않습니다.
-10,000 ≤ X, Y ≤ 10,000
-20,000 ≤ Z ≤ 20,000
[연산자]는 + 와 - 중 하나입니다.
- 풀이
def solution(quiz):
answer = []
for i in quiz:
q = i.split()
if q[1] == '+':
if int(q[0]) + int(q[2]) == int(q[-1]):
answer.append('O')
else:
answer.append('X')
elif q[1] == '-':
if int(q[0]) - int(q[2]) == int(q[-1]):
answer.append('O')
else:
answer.append('X')
return answer
- 문제
덧셈, 뺄셈 수식들이 'X [연산자] Y = Z' 형태로 들어있는 문자열 배열 quiz가 매개변수로 주어집니다. 수식이 옳다면 "O"를 틀리다면 "X"를 순서대로 담은 배열을 return하도록 solution 함수를 완성해주세요.
- 제한 사항
연산 기호와 숫자 사이는 항상 하나의 공백이 존재합니다. 단 음수를 표시하는 마이너스 기호와 숫자 사이에는 공백이 존재하지 않습니다.
1 ≤ quiz의 길이 ≤ 10
X, Y, Z는 각각 0부터 9까지 숫자로 이루어진 정수를 의미하며, 각 숫자의 맨 앞에 마이너스 기호가 하나 있을 수 있고 이는 음수를 의미합니다.
X, Y, Z는 0을 제외하고는 0으로 시작하지 않습니다.
-10,000 ≤ X, Y ≤ 10,000
-20,000 ≤ Z ≤ 20,000
[연산자]는 + 와 - 중 하나입니다.
- 풀이
def solution(quiz):
answer = []
for i in quiz:
q = i.split()
if q[1] == '+':
if int(q[0]) + int(q[2]) == int(q[-1]):
answer.append('O')
else:
answer.append('X')
elif q[1] == '-':
if int(q[0]) - int(q[2]) == int(q[-1]):
answer.append('O')
else:
answer.append('X')
return answer
결괏값이 기대값이랑 똑같이 나오는데 자꾸 테스트 실패라고 해서 왜???? 한참 찾았는데
answer.append('O') 이걸 answer.append('0')로 써놨었음
노트북 키보드 좁은게... 이런 사태가...는 무슨 내가 제대로 안읽은 탓이겠지 :(
- 문제
머쓱이는 RPG게임을 하고 있습니다. 게임에는 up, down, left, right 방향키가 있으며 각 키를 누르면 위, 아래, 왼쪽, 오른쪽으로 한 칸씩 이동합니다. 예를 들어 [0,0]에서 up을 누른다면 캐릭터의 좌표는 [0, 1], down을 누른다면 [0, -1], left를 누른다면 [-1, 0], right를 누른다면 [1, 0]입니다. 머쓱이가 입력한 방향키의 배열 keyinput와 맵의 크기 board이 매개변수로 주어집니다. 캐릭터는 항상 [0,0]에서 시작할 때 키 입력이 모두 끝난 뒤에 캐릭터의 좌표 [x, y]를 return하도록 solution 함수를 완성해주세요.
[0, 0]은 board의 정 중앙에 위치합니다. 예를 들어 board의 가로 크기가 9라면 캐릭터는 왼쪽으로 최대 [-4, 0]까지 오른쪽으로 최대 [4, 0]까지 이동할 수 있습니다.
- 제한 사항
board은 [가로 크기, 세로 크기] 형태로 주어집니다.
board의 가로 크기와 세로 크기는 홀수입니다.
board의 크기를 벗어난 방향키 입력은 무시합니다.
0 ≤ keyinput의 길이 ≤ 50
1 ≤ board[0] ≤ 99
1 ≤ board[1] ≤ 99
keyinput은 항상 up, down, left, right만 주어집니다.
- 풀이
def solution(keyinput, board):
answer = [0,0]
for i in keyinput:
if i == 'left':
answer[0] -= 1
if abs(answer[0]) > board[0] // 2:
answer[0] = -(board[0] //2)
elif i == 'right':
answer[0] += 1
if abs(answer[0]) > board[0] // 2:
answer[0] = board[0] // 2
elif i == 'up':
answer[1] += 1
if abs(answer[1]) > board[1] // 2:
answer[1] = board[1] // 2
else:
answer[1] -= 1
if abs(answer[1]) > board[1] // 2:
answer[1] = -(board[1] // 2)
return answer
'데이터분석 > TIL' 카테고리의 다른 글
240711 TIL (0) | 2024.07.11 |
---|---|
20240704 TIL (0) | 2024.07.04 |
240702 TIL (0) | 2024.07.02 |