dev_beomgeun
꾸준하게 차근차근
dev_beomgeun
전체 방문자
오늘
어제
  • 분류 전체보기 (170)
    • 전공 (0)
      • 운영체제 (0)
      • 알고리즘 (0)
      • 자료구조 (0)
      • 데이터베이스 (0)
      • 네트워크 (0)
    • 개발 공부 (32)
      • 웹 (6)
      • 리눅스 (4)
      • 머신러닝 (1)
      • 스프링 (17)
      • Git (2)
      • AWS (2)
    • 개발 도서, 강의 (3)
      • 스프링 입문을 위한 자바 객체지향의 원리와 이해 (0)
      • 모든 개발자를 위한 HTTP 웹 기본 지식(김영한.. (2)
      • 스프링 부트와 AWS로 혼자 구현하는 웹서비스 (1)
    • 문제 풀이 (118)
      • 백준 알고리즘 (72)
      • 프로그래머스 알고리즘, SQL (38)
      • Hackerrank SQL (8)
    • 프로젝트 기록 (4)
      • 캡스톤 종합설계 (4)
      • 반려하루 프로젝트 (0)
    • 활동 기록 (12)
      • 네이버 부스트캠프 (7)
      • 취준 & 코테 (4)
      • 소프트웨어 마에스트로 13기 (1)
    • 이것저것 (1)

블로그 메뉴

  • 홈
  • 깃허브
  • 링크드인
  • 방명록

공지사항

인기 글

태그

  • c++
  • 회고
  • 기록
  • BFS
  • AI Tech
  • 부스트캠프
  • 스프링
  • dp
  • 백준 DP
  • 프로그래머스
  • 반성
  • 백준
  • 서블릿
  • 그래프탐색
  • 네이버 부스트캠프
  • 프로그래머스 SQL
  • Hackerrank
  • Baekjoon
  • 일기
  • HackerRank mysql

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dev_beomgeun

꾸준하게 차근차근

문제 풀이/프로그래머스 알고리즘, SQL

[프로그래머스 위클리 챌린지 6주차] 복서 정렬하기 (정렬) [C++]

2021. 9. 7. 17:44
728x90

https://programmers.co.kr/learn/courses/30/lessons/85002

 

코딩테스트 연습 - 6주차

복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요

programmers.co.kr

복서들의 정보와, 전적을 통해 정렬하는 문제이다.

1. 전체 승률이 높은 순

2. 자신보다 무거운 사람을 이긴 횟수가 많은 순

3. 내 몸무게가 무거운 순

4. 번호 작은 순

으로 정렬을 하면 된다.

 

2중 for문을 돌면서 이긴 경우, 진 경우, 이겼는데 나보다 상대 몸무게가 무거운 경우를 세주면 된다.

난 처음에 틀렸는데 행의 개수로 승률을 나눠서 그랬다.

W L N이 있는데 N은 경기를 아예 안 한 경우로, 승률을 계산할 때 분모에 포함되면 안 된다.

또한 실수형으로 계산해줘야 정확한 승률 계산이 된다.

double형 변수 = int 연산 int를 해도 int값이 저장되는데, 형 변환을 해주어야 double형으로 잘 저장이 된다.

 

또한, 정렬을 어떻게 할 것인가에 대해서 방법들이 있는데

1) compare 함수를 만들어서 정의해주는 경우

2) 정렬 기준을 보면 1, 2, 3은 내림차순이고 4만 오름차순이므로 vector에 넣어줄 때 1, 2, 3번 조건에 -을 붙여주고 일반 sort를 진행하면 잘 정렬이 된다.

 

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;
typedef pair<double, pair<int, pair<int, int>>> pdiii;
vector<pdiii> v;

vector<int> solution(vector<int> weights, vector<string> head2head) {
    vector<int> answer;
    double cnt = weights.size();
    for(int i = 0 ; i < cnt ; i++){
        int winCnt = 0; int heavyCnt = 0; int totalCnt = 0;
        for(int j = 0 ; j < cnt ; j++){
            if(head2head[i][j] == 'W'){// i+1이 j+1을 이김
                winCnt++;
                totalCnt++;
                if(weights[i] < weights[j])
                    heavyCnt++;
            }
            else if(head2head[i][j] == 'L')
                totalCnt++;
        }
        v.push_back({-winCnt / double(totalCnt), {-heavyCnt, {-weights[i], i+1}}});
    }
    
    sort(v.begin(), v.end());
    
    for(auto a : v)
        answer.push_back(a.second.second.second);
    
    return answer;
}

 

728x90
저작자표시 비영리 변경금지 (새창열림)

'문제 풀이 > 프로그래머스 알고리즘, SQL' 카테고리의 다른 글

[프로그래머스 2019 카카오 개발자 겨울 인턴십] 불량 사용자 (DFS, 조합) [C++]  (0) 2021.10.07
[프로그래머스 2021 Dev-Matching: 웹 백엔드 개발자 상반기 SQL] 헤비 유저가 소유한 장소  (0) 2021.10.06
[프로그래머스 LV4] 징검다리 (이진 탐색, 매개변수 탐색) [C++]  (0) 2021.09.05
[프로그래머스 카카오 블라인드 채용 2021 3번] 순위 검색 (구현, 이진탐색) [C++]  (0) 2021.09.01
[프로그래머스 위클리 챌린지 3주차] 퍼즐 조각 맞추기 (구현, BFS) [C++]  (0) 2021.08.29
    '문제 풀이/프로그래머스 알고리즘, SQL' 카테고리의 다른 글
    • [프로그래머스 2019 카카오 개발자 겨울 인턴십] 불량 사용자 (DFS, 조합) [C++]
    • [프로그래머스 2021 Dev-Matching: 웹 백엔드 개발자 상반기 SQL] 헤비 유저가 소유한 장소
    • [프로그래머스 LV4] 징검다리 (이진 탐색, 매개변수 탐색) [C++]
    • [프로그래머스 카카오 블라인드 채용 2021 3번] 순위 검색 (구현, 이진탐색) [C++]
    dev_beomgeun
    dev_beomgeun
    백엔드 개발을 하며 얻은 지식과 경험을 공유합니다. 현재 카카오페이에서 백엔드 엔지니어로 일하고 있습니다.

    티스토리툴바