본문 바로가기

전체 글

(46)
[프로그래머스] [Python] 카펫 문제 풀이 def solution(brown, yellow): answer = [] # 카펫의 전체 크기는 brown + yellow 이다. area = brown + yellow # yellow가 최소(1)일 때 area는 3 * 3의 크기를 가진다. 이는 width의 최솟값이 3이고, 최댓값이 area / 3이라는 것을 말한다. for width in range(int(area / 3), 1, -1): # area가 가로 값으로 나누어 떨어지면 if area % width == 0: # 그에 따른 세로 값을 구한 후 height = area // width # yellow는 brown을 테두리로 가진 사각형이다. 상하좌우로 크기를 -1씩 줄인, 즉 (가로-2)*(세로-2)의 크기를 가진 사각형이다. ..
[프로그래머스] [C++] 카펫 문제 풀이 #include #include using namespace std; vector solution(int brown, int red) { vector answer; // 카펫의 전체 크기는 brown + yellow다. int area = brown + yellow; // yellow가 최소(1)일 때 area는 3 * 3의 크기를 가진다. 이는 width의 최솟값이 3이고, 최댓값이 area / 3이라는 것을 말한다. // 가로가 세로보다 같거나 커야 하기 때문에 최댓값부터 내려가는 식으로 for문을 구현한다. for (int width = area / 3; width >= 3; width--) { // area가 가로 값으로 나누어 떨어지면 if (area % width == 0) { //..
[프로그래머스] [Python] 소수 찾기 문제 풀이 from itertools import permutations def solution(numbers): answer = 0 # 순열을 저장할 배열 생성 arr = [] # 슷자가 1개인 것부터 검사할 것이다. 때문에 시작이 1이고 끝도 그에 맞춰서 1을 더해준다. for i in range(1, len(numbers) + 1): # 순열을 구하는 함수 permutations. 이를 list로 받아서 per에 저장. per = list(permutations(numbers, i)) # 해당 배열을 arr에 추가. arr += per # 현재 arr 내의 각 배열에는 문자형으로, 그리고 숫자 하나씩 떨어져서 원소들이 저장되어 있다. # 이를 ''.join을 사용하여 하나로 합쳐주고, '0123'같..
[프로그래머스] [C++] 소수 찾기 문제 풀이 #include #include #include #include using namespace std; int solution(string numbers) { int answer = 0; // string 타입의 numbers를 int로 받아올 벡터 생성 vector num; // 현재 numbers는 string 형태이기 때문에 int형으로 받아오게 되면 숫자가 달라진다. ex) string 타입의 "0"은 int타입으로 48. // 때문에 '0'을 빼서 int형태에 맞게 숫자를 맞춰준다. for (auto it : numbers) num.push_back(it - '0'); // next_permutation을 사용하기 위해 오름차순으로 정렬해준다. 왜냐하면 // next_permutatio..
[프로그래머스] [Python] 모의고사 문제 풀이 def solution(answers): answer = [] # 수포자의 찍는 방식 math_hater = [[1, 2, 3, 4, 5], [2, 1, 2, 3, 2, 4, 2, 5], [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]] # 수포자의 점수 배열 answer_cnt = [] # 각 수포자(man)를 돌면서 for man in math_hater: # 점수 저장을 위한 변수. 하단의 for문을 다 돈 후 0으로 계속 초기화된다. cnt = 0 # 정답을 확인한다. for i in range(len(answers)): # 각 수포자마다 찍는 방식의 주기가 다르다. 이를 처리하기 위해서 # i % len(man), 각 수포자의 찍는 주기로 % 하여 해당 주기를 루프하도록 한다...
[프로그래머스] [C++] 모의고사 문제 풀이 #include #include #include using namespace std; vector solution(vector answers) { vector answer; // 수포자의 찍는 방식 vector s = { {1, 2, 3, 4, 5} , {2, 1, 2, 3, 2, 4, 2, 5} , {3, 3, 1, 1, 2, 2, 4, 4, 5, 5} }; // 각 수포자의 점수 vector v = { 0, 0, 0 }; // 수포자의 인원만큼 돌면서 for (int i = 0; i < s.size(); i++) { // 정답을 확인하는데 for (int j = 0; j < answers.size(); j++) { // 첫 번째 수포자이고, 이 사람의 찍는 방식은 5를 주기로 계속 돈다. ..
[프로그래머스] [Python] H-Index 문제 풀이 def solution(citations): answer = 0 # citations를 내림차순으로 정렬 citations = sorted(citations, reverse=True) # citations는 현재 가장 큰 수부터 작아지는 순으로 정렬되어 있다. # citations[i]는 인용된 횟수이고, i는 논문의 개수이다. # 즉, 인용된 횟수 citations[i](h)가 i(h)편 이상이기 위해서는 # citations[i] > i 를 충족해야 한다. for i in range(len(citations)): if citations[i] > i: answer += 1 return answer 문제 링크 programmers.co.kr/learn/courses/30/lessons/4274..
[프로그래머스] [C++] H-Index 문제 풀이 #include #include #include using namespace std; int solution(vector citations) { int answer = 0; // citations를 내림차순으로 정렬 sort(citations.begin(), citations.end(), greater()); // citations는 현재 가장 큰 수부터 작아지는 순으로 정렬되어 있다. // citations[i]는 인용된 횟수이고, i는 논문의 개수이다. // 즉, 인용된 횟수 citations[i](h)가 i(h)편 이상이기 위해서는 // citations[i] > i 를 충족해야 한다. for (int i = 0; i < citations.size(); i++) if (citations[..