int<->String

  • int-> string
    • string str = to_string(num;
  • string -> int
    • int num = stoi(str)

String<->char 

  • char ->string
    • string str(ch)
  • string ->char
    • strcpy(ch, str.c_str()); //쓸일딱히없음.

 

char<->int

  • char -> int
    • int num = ch-'0';
  • int ->char

 

	//string -> int
	string s1="123";
	int n1 = stoi(s1);
	//int - >string
	int n2=100;
	string s2 = to_string(n2);


	//char->string
	char ch1[] = { "jiji" };
	char *ch2 = "123";
	string s3(ch1);
	string s4(ch2);

	//string ->char
	char ch[100];
	string a = "I wanna go to bed";
	strcpy_s(ch, a.c_str());
 

	//char -> int
	char ch3='100';
	int num = ch3 - '0';

 

Pair

bool cmp 함수가 가장 중요하다.

bool cmp(pair<int, int> a, pair<int, int> b)
{
	if (a.first < b.first)
		return true;

	else if (a.first == b.first)
	{
		if (a.second < b.second)
		{
			return true;
		}
	}
	return false;
}
  • true이면 조건문그대로 정렬 하는 것
  • false이면 swap 해주는 것 
  • 위의 조건문은 first기준 오름차순이며 같을 경우 second 값을 오름차순으로 결정한다..
	v.push_back({ 1,3 });
	v.push_back({ 1,4 });
	v.push_back({ 10,3 });
	v.push_back({ 12,3 });
	v.push_back({ 14,3 });
	v.push_back({ 14,2 });

	sort(v.begin(), v.end(), cmp);

Struct

if(a.z>b.z) 면 true라는 것은 내림차순 정렬이다.! a.z>b.z가 큰 것이 맞다!

using namespace std;
struct abc
{
	int x;
	int y;
	int z;
};
 
bool cmp(abc a, abc b)
{
	if (a.z > b.z)
		return true;
	else
		return false;
}
int main()
{
 
	vector<abc> v;
	v.push_back({ 1,2,1 });
	v.push_back({ 1,2,2 });
	v.push_back({ 1,2,3 });
	v.push_back({ 1,2,4 });

	//1,2,4->1,2,3->1,2,2->1,2,1로 정렬해라
	sort(v.begin(), v.end(), cmp); 
	

	return 0;
}

 

priority_queue<자료형, 구현체(container), 비교 연산자(compare 함수)> 

구현하기전 필수사항

#include <algorithm>
#include <queue>
#include <functional>

최소 힙 (= queue에 가장 top이 가장 작은 값으로 올라 오는 경우)

	priority_queue<int, vector<int>, greater<int>> min_pq; //오름차순
	min_pq.push(3);
	min_pq.push(4);
	min_pq.push(5);
	min_pq.push(6); //3,4,5,6

 

최대 힙 (= queue에 가장 top이 가장 큰 값으로 올라는 오는 경우)

	priority_queue<int, vector<int>, less<int >> max_pq;// 내림차순
	max_pq.push(1);
	max_pq.push(10);
	max_pq.push(100);
	max_pq.push(33); //100,33,10,1

 

stringstream string(arr[i])

vector<string> info;

0 "abcd abcd abcd abcd"
1 "abcd abcd abcd abcd"
2 "abcd abcd abcd abcd"
3 "abcd abcd abcd abcd"

다음과 같이 vector에 문자가 있고 각각의 문자들을 짤라서 배열에 담기

 

코드

for (int i = 0; i < info.size(); i++)
	{
		stringstream ss(info[i]);
		string s;
		vector<int> v;
		while (ss >> s)
		{
        	//s는 abcd로 빈칸마다 짤라준다.
        }

소문자를 대문자로 변환

  • toupper(char)
 for (i=0; i<str.size(); i++)

{

str[i]=toupper(str[i]); //소문자를 대문자로 교환.

}

 
  • tolower(char)
#include <cctype>
 
char c = 'a';
 
toupper(c);    // c를 대문자로 변경한 값을 반환
tolower(c);    // c를 소문자로 변경한 값을 반환

 

 

 

'Algorithm > Algorithm_Tip' 카테고리의 다른 글

[최소힙, 최대힙] priority_queue  (0) 2020.10.21
[Tip] 문자열 짜르기  (0) 2020.09.17
[강의] 투포인트 알고리즘  (0) 2020.09.12
[Java 입출력] StringTokenizer  (0) 2020.09.08
[JAVA 입력 TIP]  (0) 2020.09.08

투포인트 알고리즘

  • 이중 포문으로 O(N^2)이 아닌 1초안에 답이 나오게 하기 위한 알고리즘

 

 

 

예제)

풀이

  • STEP1)A배열, B배열, C배열(교집합배열)을 만든다.
  • STEP2)A배열 0번째, B배열 0번째 비교해서  (A[0] < B[0])이면 A 배열의 포인터를 +1 만큼 증가 시킨다. 즉 더 작은 값의 배열을 +1 증가 시킨다.
  • STEP2,3)A[1] == B[0] 이면 그 값을 C[0]에 넣고 C[cnt++]해준다. 또한, A배열, B배열 포인터를 +1 만큼 증가시킨다.
  • STEP4)누군가 하나의 배열이 끝나면 종료.

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

using namespace std;


int main()
{
	int n, m, i, p1 = 0, p2 = 0, p3 = 0;
	cin >> n;
	vector<int> a(n);
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}

	sort(a.begin(), a.end());
	cin >> m;
	vector<int> b(m), c(n + m);

	for (int i = 0; i <m; i++)
	{
		cin >> b[i];
	}

	sort(b.begin(), b.end());

	//2point
	while (p1 < n && p2 < m)
	{
		if (a[p1] == b[p2])
		{
			c[p3++] = a[p1++];
			p2++;
		}
		else if (a[p1] < b[p2])
			p1++;
		else
			p2++;

	}
	for (int i = 0; i < p3; i++)
		cout << c[i] << " " ;
	return 0;
}

 

  • StringTokenizer 클래스는 문자열을 우리가 지정한 구분자로 문자열을 쪼개주는 클래스입니다. 그렇게 쪼개어진 문자열을 우리는 토큰(token)이라고 부릅니다.
  • java.util.StringTokenizer
    • int countTokens()
      • 남아 있는 token 반환
    • boolean hasMoreElemets()
      • 다음 토큰이 있으면 true 없으면 false 반환
    • String nextToken()
      • 다음의 토큰을 반환
  • 코드
package Z_ShinHanCard_Prepare;
import java.util.*;
import java.io.*;
public class D4StringTokenizer연습 
{

	public static void main(String[] args) 
	{
		// TODO Auto-generated method stub
		//String totalStr ="toot woof wa ow ow ow pa blub blub pa toot pa blub pa pa ow pow toot";
		String totalStr ="hello world hi world";
		StringTokenizer st = new StringTokenizer(totalStr);
		System.out.println(st);
		System.out.println();
		
		
		System.out.println("total tokens : " + st.countTokens());
		System.out.println();
		
		while(st.hasMoreTokens())
		{
			System.out.println(st.nextToken());
		}
		
		System.out.println("total tokens : " + st.countTokens());
		
		
	}

}

 

결과

CASE1

  • 붙어있는 경우

  • N 첫줄을 parse해준다.
  • N을 이용해서 루프를 돈다.
  • i는 한줄씩->input=br.readLine();
  • j는 한글자씩-> arr[i][j] = input.charAt(j) - '0';
    • br.readLine()은 한줄을 String으로 받기 때문에 숫자로 바꿔주기 위해서 -'0'을 해준다.
		BufferedReader br= new BufferedReader (new InputStreamReader(System.in));
		String input= br.readLine();
		N = Integer.parseInt(input);
		house = new int [N][N];
		visited = new boolean [N][N];
		//Arrays.fill(visited, false);
		for(int i = 0 ; i < N; i++)
		{
			input = br.readLine();
			for(int j =0 ; j < N ; j++)
			{
				int tempNum = input.charAt(j);
				house[i][j] = input.charAt(j) -'0'; 
			}
		}

 

CASE2

  • 떨어져 있는 경우

  • StringTokenizer 를 사용한다. 
  • br.readLine(=String) 은 같다. 하지만 한 줄에서 띄어쓰기전까지만 짜른다.
  • ex) 30 50
    • StringTokenizer st =new StringTokeizer(input); //input은 한 줄 
    • int first = Interger.parseInt(st.nextToken()); // 한줄에서 띄어쓰기 전까지 first -> 30
    • int second = Integer.parseInt(st.nextToken()); // 50
		BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(br.readLine());
		for(int tc =0; tc<T; tc++)
		{
			inin();
			L=Integer.parseInt(br.readLine()); //L*L 
			visit =new boolean[L][L];
			for (boolean row[]: visit) {
				Arrays.fill(row,  false);
			} //초기화시킴
			String input = br.readLine();  // 0,0
			StringTokenizer st= new StringTokenizer(input);

			int sx =Integer.parseInt(st.nextToken()); 
			int sy =Integer.parseInt(st.nextToken()); 
			input = br.readLine();  // 0,0
			st= new StringTokenizer(input);
			int ex =Integer.parseInt(st.nextToken());
			int ey =Integer.parseInt(st.nextToken());
         }

+ Recent posts