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

 

17219번: 비밀번호 찾기

첫째 줄에 저장된 사이트 주소의 수 N(1 ≤ N ≤ 100,000)과 비밀번호를 찾으려는 사이트 주소의 수 M(1 ≤ M ≤ 100,000)이 주어진다. 두번째 줄부터 N개의 줄에 걸쳐 각 줄에 사이트 주소와 비밀번

www.acmicpc.net

 

 

[난이도] Silver4
[유형] Map

[풀이]
Map

 

import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.*
fun main() = with(BufferedReader(InputStreamReader(System.`in`))){
    var (N,M) = readLine().split(' ').map{it.toInt()}
    val mp = HashMap<String,String>()
    repeat(N){
        var ip = readLine().split(' ')
        mp[ip[0]]=ip[1]
    }
    repeat(M){
        println(mp[readLine()])
    }
}

 

https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Silver4/17219.cpp

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

 

9375번: 패션왕 신해빈

첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로   (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다.

www.acmicpc.net

 

 

[난이도] Silver3
[유형] Map

[풀이]

각 옷의 종류를 map<String,Int> 의 키로 하여 각 옷의 종류마다 몇개의 옷이 있는지 value로 저장합니다. 

그 뒤 모든 (value+1)을 곱해준 값에서 1을 빼준 값이 정답이 됩니다.

value에 1을 더해주는 이유는 이 종류의 옷을 입지 않은 경우의 수이며

마지막에 1을 빼주는 이유는 아무 종류의 옵도 입지 않은 경우는 제외시켜야 하기 때문입니다.

 

import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.*
fun main() = with(BufferedReader(InputStreamReader(System.`in`))){
    var tc = readLine().toInt()
    while(tc-->0) {
        var N = readLine().toInt()
        val mp = HashMap<String, Int>()
        for(i in 0 until N) {
            val a = readLine().split(" ")[1]
            if(mp.containsKey(a)) mp[a] = 1+mp[a]!!
            else mp[a] = 1
        }
        var ans=1
        for(a in mp.values) ans*=(a+1)
        println(ans-1)
    }
}

https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Silver3/9375.cpp

import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.*
fun main() = with(BufferedReader(InputStreamReader(System.`in`))){

    val mp = HashMap<Int,Int>() // 순서가 필요한 경우 TreeMap 사용

    mp[1]=1 // 데이터 삽입시
    mp[2]=2
    mp[3]=3

    mp[1]=(mp[1]?:0)+1 // 기존 데이터를 이용한 수정시 (예를 들어 1증가) null체크를 위해 엘비스 연산자 사용

    for((key,value) in mp){
        println("key:$key value:$value")
    }
//    출력
//    key:1 value:2
//    key:2 value:2
//    key:3 value:3
}
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.*
fun main() = with(BufferedReader(InputStreamReader(System.`in`))){

    val mp = HashMap<Int,Int>() // 순서가 필요한 경우 TreeMap 사용

    mp[1]=1 // 데이터 삽입시
    mp[2]=2
    mp[3]=3

    mp[1]=(mp[1]?:0)+1 // 기존 데이터를 이용한 수정시 (예를 들어 1증가) null체크를 위해 엘비스 연산자 사용

    for((key,value) in mp){
        println("key:$key value:$value")
    }
//    출력
//    key:1 value:2
//    key:2 value:2
//    key:3 value:3
}

 

코틀린에서 map을 사용하는 예시입니다.

C++처럼 mp[1]++ 이런 연산은 안되고 엘비스 연산자를 이용해

mp[1]=(mp[1]?:0)+1 이렇게 해주어야 하는것이 불편하네요. 

'Problem-Solving > 코틀린으로 PS하기' 카테고리의 다른 글

다차원 배열  (0) 2021.08.08
우선순위큐 (PriorityQueue)  (0) 2021.07.15
정렬  (0) 2021.07.15


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

 

4358번: 생태학

프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어

www.acmicpc.net

[난이도] Gold4
[유형] Map, Trie

[풀이]
종의 이름을 key로 하는 (string,int) pair의 map을 만들어서
해당 종의 총 갯수를 구하면 된다.

나무 이름에 공백이 있을 수도 있으므로 한줄 전체를 입력으로 받아야 한다.
getline(cin,s) 함수를 이용하면 한줄을 단위로 입력받을 수 있다.
EOF 같은 경우 아래와 같이 처리해주면 파일이 끝날 때 while문을 빠져나가게 된다.
while(getline(cin,s)){

}

Trie로 풀면 더 빠른시간내에 해결할 수 있다고 한다.

 

#include <iostream>
#include <map>
#include <string>
#include <cmath>
using namespace std;
map<string,int> m;
int n;
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    string s;
    while(getline(cin,s)){
        m[s]++;
        n++;
    }
    for(auto k : m){
        double b = 100*k.second / (double)n;
        printf("%s %.4lf\n",k.first.c_str(),b);
    }
}


https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold4/4358.cpp

+ Recent posts