본문 바로가기

전체 글

(46)
[프로그래머스] [Python] 주식가격 문제 풀이 def solution(prices): # 인덱스 오류가 나지 않도록 answer를 0으로 초기화 answer = [0 for i in prices] for i in range(len(prices)): # i 다음부터 검사하면 되기 때문에 i + 1부터 시작한다. for j in range(i + 1, len(prices)): # i보다 크거나 같으면 계속 더해주고 if prices[j] >= prices[i]: answer[i] += 1 # i보다 작더라도 1초 더(루프를 한번 더) 돌았기 때문에 1을 더해주고 break else: answer[i] += 1 break return answer 문제 링크 programmers.co.kr/learn/courses/30/lessons/42584?..
[프로그래머스] [C++] 주식가격 문제 풀이 #include #include using namespace std; vector solution(vector prices) { vector answer; for (int i = 0; i < prices.size(); i++) { // 몇 초 동안 떨어지지 않았는지 체크할 변수 int cnt = 0; // i 다음부터 검사하면 되기 때문에 i + 1부터 시작한다. for (int j = i + 1; j < prices.size(); j++) { // i보다 크거나 같으면 계속 더해주고 if (prices[i]
[프로그래머스] [Python] 베스트앨범 문제 풀이 from collections import defaultdict def solution(genres, plays): answer = [] # int값을 value로 가진 딕셔너리 생성 play_count_by_genre = defaultdict(int) # list를 value로 가진 딕셔너리 생성 songs_in_genre = defaultdict(list) # 고유번호 생성 index = [i for i in range(len(genres))] for song_id, genre, play in zip(index, genres, plays): # 가장 많이 재생된 장르를 찾기 위해 각 장르가 몇번 재생되었는지 체크 play_count_by_genre[genre] += play # 해당 장르에..
[프로그래머스] [C++] 베스트앨범 문제 풀이 #include #include #include #include using namespace std; // make_pair를 사용했기 때문에 인자도 pair로 받는다. bool pg_cmp(pair a, pair b) { // int 부분을 비교. 여기서는 재생 횟수를 내림차순으로 비교하는 것이다. 큰것부터 가져오기 떄문. return a.second > b.second; } vector solution(vector genres, vector plays) { vector answer; // 각 장르의 총 재생횟수를 카운트 map genre_cnt; for (unsigned int i = 0; i < genres.size(); i++) genre_cnt[genres[i]] += plays[i]..
[프로그래머스] [Python] 위장 문제 풀이 def solution(clothes): answer = 1 arr = list() # 배열 arr에 옷의 종류(key)만 넣어줌 for val, key in clothes: arr.append(key) # 중복을 제거하기 위해 set을 사용. 이렇게 하면 옷의 종류 하나씩만 남게 됨 s = set(arr) cnt = list() # 옷의 개수를 cnt배열에 추가 for i in s: cnt.append(arr.count(i)) # 하단 설명 참조 for i in cnt: answer *= (i + 1) answer -= 1 return answer 여기에서는 (a+1)(b+1)(c+1)...-1라는 공식을 사용하였습니다. 예를 들어 headgear가 5개, eyewear가 3개 있다고 해봅시..
[프로그래머스] [C++] 위장 문제 풀이 #include #include #include using namespace std; int solution(vector clothes) { // map map m; // 이후 곱셈을 사용하기 위해 answer를 1로 초기화 int answer = 1; // 의상의 종류만 확인하면 되기 때문에 clothes 배열에서 의상 종류만 가져온 후 // 각 의상의 개수를 더한다. for(vector i : clothes) m[i[1]]++; // 하단 설명 참조 for(auto it : m) answer *= (it.second + 1); return answer - 1; } 여기에서는 (a+1)(b+1)(c+1)...-1라는 공식을 사용하였습니다. 예를 들어 headgear가 5개, eyewear가 ..
[프로그래머스] [Python] 전화번호 목록 문제 풀이 def solution(phone_book): answer = True # 배열 정렬 phone_book = sorted(phone_book) # 첫번째 원소를 접두어로 삼아 검사 f = phone_book[0] for i in phone_book[1:]: if f in i: answer = False break return answer 이렇게 풀어도 전부 통과가 나오는데, 가만 생각해보면 {"12", "23", "234"} 등의 배열과 같이 첫 번째 원소가 아니라 그 이후의 원소가 접두어가 되는 경우가 생길 수 있다. 해서 다른 사람이 푼 코드를 보았는데 def solution(phoneBook): phoneBook = sorted(phoneBook) for p1, p2 in zip(phon..
[프로그래머스] [C++] 전화번호 목록 문제 풀이 #include #include #include using namespace std; bool solution(vector phone_book) { bool answer = true; // 배열을 정렬. string 형태이므로 크기순이 아닌 사전순으로 정렬된다. sort(phone_book.begin(), phone_book.end()); // 맨 앞의 원소를 접두어로 삼는다 string chk = phone_book[0]; for (int i = 1; i < phone_book.size(); i++) { if (phone_book[i].substr(0, chk.size()) == chk) answer = false; } return answer; } 이렇게 풀어도 전부 통과가 나오는데, 가만..