Programmers 29

[1단계] [심화] 크레인 인형 뽑기 게임

문제 설명 게임개발자인 "죠르디"는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다. "죠르디"는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다. 게임 화면은 "1 x 1" 크기의 칸들로 이루어진 "N x N" 크기의 정사각 격자이며 위쪽에는 크레인이 있고 오른쪽에는 바구니가 있습니다. (위 그림은 "5 x 5" 크기의 예시입니다). 각 격자 칸에는 다양한 인형이 들어 있으며 인형이 없는 칸은 빈칸입니다. 모든 인형은 "1 x 1" 크기의 격자 한 칸을 차지하며 격자의 가장 아래 칸부터 차곡차곡 쌓여 있습니다. 게임 사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올릴 수 있습니다. 집어 올린 인형은 바구니에 쌓이게 되는 데,..

Programmers/1단계 2022.09.19

[1단계] [ 탐욕법 ] 체육복

문제 문제접근 항상 하는 말이지만 for while 정말 중요하고 if에서 조건을 어떻게 달아주느냐가 핵심이다. 탐욕법을 활용한다. 문제해석 def solution(n, lost, reserve): reserve_set = set(reserve)-set(lost) lost_set = set(lost)-set(reserve) for reserve_person in reserve_set: if reserve_person-1 in lost_set: lost_set.remove(reserve_person-1) elif reserve_person+1 in lost_set: lost_set.remove(reserve_person+1) return n-len(lost_set) for 반복문을 통해서 lostlist를..

Programmers/1단계 2022.05.18

[1단계][연습문제] 소수 찾기

문제접근 문제풀이 내풀이 def solution(n): num=set(range(2,n+1)) for i in range(2,n+1): if i in num: num-=set(range(2*i,n+1,i)) return len(num) 다른사람풀이 def numberOfPrime(n): sum = 0 s = 0 for i in range(2,n+1): for j in range(2,i): if i % j == 0: s += 1 if s == 0: sum += 1 s = 0 return sum def numberOfPrime(n): # 1부터 n사이의 소수는 몇 개인가요? return 0 def is_prime(n): return all([(n%j) for j in range(2, int(n**0.5)+1..

Programmers/1단계 2022.03.25

[1단계][연습문제] 시저암호

문제접근 # main # 아스키코드 사용 (ord -> 숫자 chr -> 문자 ) # for을 사용해서 문자열 전체길이만큼 돌린다. # 아스키코드 +n 해서 다시 문자열로 받아서 문자열 재초기화 # 조건 만약 공백이라면 공백을 추가 # 문제 # z를 넘어가면 문자가 나오지않고 특수문자가 나옴 # 범위안(아스키 코드)에 문자만 해결(제한적 해결) 문자열을 초기화한다. A = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ") B = list("abcdefghijklmnopqrstuvwxyz") 문자열 길이 만큼 for 반복문을 돌린다. if 만약 그 문자가 list에 있다면 그 문자열에 인덱스를 가지고 그 인덱스에 +n 만큼한 인덱스를 가지고 배열을 재초기화 한다. 대문자인 경우, 소문자인 경우..

Programmers/1단계 2022.03.24

[1단계][연습문제] 문자열 내 마음대로 정렬하기

문제접근 리스트를 재초기화한다. 문자열 앞의 인덱스만 앞에 넣어서 for 반복문을 사용해 슬라이싱해 출력 lambda함수와 sorted함수를 사용한다. 문제풀이 내풀이 def solution(strings, n): new_str = [] for i in strings: new_str.append(i[n] + i) new_str.sort() return [i[1:] for i in new_str] 다른사람풀이 def strange_sort(strings, n): '''strings의 문자열들을 n번째 글자를 기준으로 정렬해서 return하세요''' return sorted(strings, key=lambda x: x[n]) sorted함수를 사용하였다.

Programmers/1단계 2022.03.21

[1단계][연습문제] 이상한 문자 만들기

문제접근 split을 사용하여 단어를 나눈다. list를 사용해서 각 단어의 개수를 for 반복 돌린다. 문자열 자체를 for을 돌린다 if조건하에 다돌리면 answer에 apppend를 result를 append한다. 총 다된 것을 문자열 형태로 ' '띄어쓰기 하나두고 문자열 형식으로 join한다. 문제풀이 내풀이 def solution(s): answer = [] s = s.split(' ') for i in range(len(s)): result = '' for j in range(len(s[i])): if j%2==0: result = result + s[i][j].upper() else: result = result + s[i][j].lower() answer.append(result) retu..

Programmers/1단계 2022.03.20

[1단계][연습문제] 최대공약수와 최소공배수

문제접근 for if 를 사용해서 for의 범위를 조절해서 if 조건문 두개를 써서 리스트를 재초기화 하였다. 문제풀이 내풀이 def solution(n, m): A = [] B = [] C = [] for i in range(1, max(n, m)): if n % i == 0 and m % i == 0: A.append(i) for i in range(max(n, m), (n*m)+1): if i % n == 0 and i % m == 0: B.append(i) C.append(max(A)) C.append(min(B)) return(C) 다른사람풀이 def gcdlcm(a, b): c, d = max(a, b), min(a, b) t = 1 while t > 0: t = c % d c, d = d, ..

Programmers/1단계 2022.03.19

[1단계][연습문제] 콜라츠 추측

문제접근 while로 num이 1이될때까지 돌려야하고 if 조건문과 cnt변수를 사용해서 cnt를 출력한다. 다중 if 문을 사용할 때 조심한다. 문제풀이 내풀이 def solution(num): cnt = 0 while num != 1: if num % 2 == 0: num = round(num/2) cnt += 1 elif num % 2 == 1: num = num*3 + 1 cnt += 1 if cnt >= 500: cnt = -1 return cnt 다른사람풀이 def collatz(num): for i in range(500): num = num / 2 if num % 2 == 0 else num*3 + 1 if num == 1: return i + 1 return -1 for 범위를 500으로..

Programmers/1단계 2022.03.18

[1단계] [연습문제] 같은 문자는 싫어

문제접근 배열을 사용해야 겠다. 배열을 초기화 한다. 인덱스를 사용한다 for , if문을 사용한다. 문제풀이 내풀이 def solution(arr): answer = [] for i in range(len(arr)): if i == 0: answer.append(arr[i]) elif arr[i] != arr[i-1]: answer.append(arr[i]) return answer 다른사람풀이 def no_continuous(s): a = [] for i in s: if a[-1:] == [i]: continue a.append(i) return a 슬라이싱을 이용한다.

Programmers/1단계 2022.03.16