morenow
morenow
morenow
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (5)
    • [MSA] Spring Cloud로 개발하는 마이.. (14)
    • Baekjoon Online Judge (40)
    • Programmers (11)
    • Spring Boot (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • HttpExchange
  • 백준20058C++
  • 백준 파이어스톰
  • copy up
  • Feign Client
  • write skew
  • B Tree
  • Open Feign
  • JWT단점
  • 마법사 상어와 파이어스톰
  • HTTP Interface
  • Id Token
  • Refresh Token Refresh
  • Spring Boot
  • B+ Tree
  • successHandler
  • dirty write
  • jwt
  • lost update
  • re-distribution

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
morenow

morenow

Baekjoon Online Judge

[BOJ] 1339 : 단어 수학 (C++)

2023. 9. 3. 01:59

https://www.acmicpc.net/problem/1339

 

1339번: 단어 수학

첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대

www.acmicpc.net

걸린 시간 : 17분 46초


아이디어

  1. 입력을 받으면서 알파벳들의 가중치를 설정해준다. ABC 가 들어오면 A의 가중치에 100, B의 가중치에 10, C의 가중치에 1을 추가해주는 식이다.
  2. 입력이 끝나면 가중치가 큰 알파벳 순으로 9부터 내려가면서 할당한다.

끝이다.... 어렵지는 않은 문제

Map을 Value 기준으로 정렬

 

여기서 가중치를 map으로 구현하는데, map은 key를 기준으로 정렬할 수 있다. 하지만 이 문제와 같이 value로 정렬해야 할 수 있다. C++에서는 이를 바로 정렬할 수는 없고, vector로 옮겨서 정렬하는 식으로 구현해야 한다. 코드는 다음과 같다.

vector<pair<char, int> > v(m.begin(), m.end());
sort(v.begin(), v.end(), cmp);

맵의 요소를 pair로 바꿔 그대로 vector에 복사한다. 이것을 cmp 함수를 기준으로 정렬한다. value는 second 값이므로 value를 기준으로 내림차순 정렬하고 싶으면 다음과 같은 cmp함수를 구현한다.

bool cmp(const pair<char, int>& a, const pair<char, int>& b) {
	return a.second > b.second;
}

정답 코드

#include <bits/stdc++.h>
using namespace std;

map<char, int> weight;
int N, ans, val = 9;

bool cmp(const pair<char, int>& a, const pair<char, int>& b) {
	return a.second > b.second;
}

int main(void) {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> N;
	for (int i = 0; i < N; i++) {
		string word;
		cin >> word;
		for (int j = 0; j < word.size(); j++) {
			weight[word[j]] += pow(10, word.size()-j-1);
		}
	}
	vector<pair<char, int> > v(weight.begin(), weight.end());
	sort(v.begin(), v.end(), cmp);
	for (auto p : v) {
		ans += p.second * val;
		val--;
	}
	cout << ans;
	return 0;
}

'Baekjoon Online Judge' 카테고리의 다른 글

[BOJ] 2636 : 치즈 (C++)  (1) 2023.09.07
[BOJ] 2110 : 공유기 설치 (C++)  (0) 2023.09.05
[BOJ] 3055 : 탈출 (C++)  (0) 2023.08.30
[BOJ] 1600 : 말이 되고픈 원숭이 (C++) with BFS  (0) 2023.08.29
[BOJ] 2140: 지뢰찾기 (C++)  (0) 2023.08.29
    'Baekjoon Online Judge' 카테고리의 다른 글
    • [BOJ] 2636 : 치즈 (C++)
    • [BOJ] 2110 : 공유기 설치 (C++)
    • [BOJ] 3055 : 탈출 (C++)
    • [BOJ] 1600 : 말이 되고픈 원숭이 (C++) with BFS
    morenow
    morenow

    티스토리툴바