반응형

백준 심화1 그룹단어 체크 c++ 풀이

 

 

 

 

 

 

풀이

a b c d e f g h i j k l m n o p q r s t u v w x y z
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

문자열=아스키코드

알파벳 소문자 a부터 소문자 z까지 크기가 26인 배열을 만든다음 0으로 초기화

벡터에 반복하여 저장한 입력 문자열의 각 문자에 접근한 값에서 97을 빼준다음

그 위치에 해당하는 알파벳의 값을 1 증가시켜줌

 

이때 문자열 aab인 경우 예외가 되므로 이전 문자와 현재 문자가 다른 경우에만 배열 값을 증가시킴

배열 값이 1을 초과하는 경우, 이전에 나온 문자가 한번 더 나와 그룹단어가 아니게 되므로 세지않음

 

사용 변수 용도 설명

 

cnt : 문자열 반복해서 입력받을 횟수

ans : 그룹 단어 확인 후 출력할 갯수 (정답)

vector<string> : 반복해서 입력받은 문자열 저장하는 벡터

int arr[] : 알파벳 중복 횟수 확인용

isGroupWord : 그룹 단어가 아닌 경우 구분 용도

 

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int cnt = 0;
    cin >> cnt;
    int ans = 0;
    vector<string> str;
    bool isGroupWord = true;
    for(int i=0; i<cnt; i++){
        string s = "";
        cin >> s;
        str.push_back(s);
    }
    for(int i=0; i<str.size(); i++){
        int arr[26] = {0,};
        string s = str[i];
        for(int j=0; j<s.length(); j++){
            if(s.length() == 1){
                cout << "글자 수 한 개일 때 : " << s << "\n";
                break;
            }
            if(s[j] != s[j-1]){
                cout << "현재 문자 : " << s[j] << ", 이전 글자 : " <<s[j-1] <<"\n"; 
                arr[s[j]-97]++;
                if(arr[s[j]-97] > 1) {
                    cout <<"중복된 글자 : " <<s[j] <<"\n";
                    isGroupWord = false;
                    break;
                }
            }
        }
        cout <<"문자 하나 체크 완료, ans 값 : "<< ans<< "\n";
        if(isGroupWord) {
            cout << "isGroupWord true 이므로 ans 증가 \n";
            ans++;
        }
        isGroupWord = true; //값 초기화
    }
    cout << ans;
    return 0;
}

 

 

 

 

 

반응형
반응형

 

 

지난번에 사용해본 새로운 인터넷 브라우저 WebView2의 다운로드 이벤트 처리하는 것을 다뤄봄

 

웹뷰2 방식을 사용한 인터넷 브라우저에서 파일을 다운로드 하는 경우,

자동으로 다운로드 폴더에 파일이 저장되는데

 

이때 FileSaveDialog 를 사용하여 사용자가 원하는 경로에 파일 저장할 수 있도록 커스터마이징 한 방식

 

파일 형식과 파일명은 다운로드할 때 자동으로 지정되는 형식과 파일명을 그대로 사용하였다

 

따라서 아래 방식으로는 저장할 때 파일 형식은 변경이 불가능한데 파일명만 가능한 상태로

형식 변경을 원하면 따로 수정해서 사용해줘야함

 

 

//웹뷰2 저장 경로 지정 커스터마이징
static string webSaveFilePath = "";

private bool? getSaveWebFilePath(string filePath)
{
	try
	{
		string fileExt = System.IO.Path.GetExtension(filePath).ToString();
		int strLen = fileExt.Length;

		webSaveFilePath = null;
		SaveFileDialog dlg = new SaveFileDialog();
		dlg.FileName = System.IO.Path.GetFileName(filePath).ToString();
		dlg.Filter = fileExt.Substring(1, strLen-1) + "|*" + System.IO.Path.GetExtension(filePath).ToString();

		bool? result = dlg.ShowDialog();

		if (result == true)
		{
			webSaveFilePath = System.IO.Path.GetFullPath(dlg.FileName).ToString();
		}
		return result;
	}
	catch (Exception ex)
	{
		Trace.WriteLine(ex.Message);
		return false;
	}
}


//웹뷰2 다운로드 이벤트 발생
private void WB_DownloadStarting(object sender, Microsoft.Web.WebView2.Core.CoreWebView2DownloadStartingEventArgs e)
{
	Microsoft.Web.WebView2.Core.CoreWebView2Deferral deferral = e.GetDeferral();
	string filePath = e.DownloadOperation.ResultFilePath;

	bool? saveResult = getSaveWebFilePath(filePath);
	
    //저장 취소 또는 오류 발생 시 저장 하지않음
	if (saveResult == null || saveResult == false)
	{
		e.DownloadOperation.Cancel();
		return;
	}
	System.Threading.SynchronizationContext.Current.Post((_) =>
	{
		using (deferral)
		{
			// Hide the default download dialog.
			e.Handled = true;
			e.ResultFilePath = webSaveFilePath;
		}
	}, null);
}

 

 

 

반응형
반응형

WebView2 사용방법

 

새로운 인터넷 웹뷰2를 사용하려면 패키지를 추가로 설치해주어야함

아래 스샷참고하여 패키지 설치를 먼저한 다음 코드를 작성해주면 됨

 

솔루션 우클릭 후 솔루션용 Nuget 패키지 관리 클릭

 

 

찾아보기 후 Webview 검색한 다음 Microsoft.Web.WebView2 클릭

 

 

webview를 선택한 다음 안정적인 버전 설치를 눌러 패키지 설치를 마침

 

 

 

 

Microsoft.Web.WebView2.Wpf.WebView2 webView = null;

public MainWindow()
{
    InitializeComponent();
    if (webView == null) webViewInit();
}


private void webViewInit()
{
    webView = new Microsoft.Web.WebView2.Wpf.WebView2();
    webView.Loaded += webView_Loaded;
}

private async void webView_Loaded(object sender, RoutedEventArgs e)
{
    webView.Source = new Uri("http://www.naver.com");    
    await webView.EnsureCoreWebView2Async(); //초기화하여 null return 방지
    
    //webView.CoreWebView2.Settings.AreDefaultContextMenusEnabled = false;
    //우클릭 방지, 웹뷰 새로 로드하거나 페이지 변경되면 false 풀려서 load할 때마다 추가해줘야됨
}


private void callWebView_Click(object sender, RoutedEventArgs e)
{
    webViewGrid.Children.Add(webView);

}

 

 

webView.CoreWebView2.Settings.AreDefaultContextMenusEnabled = false;

사용한 웹뷰2에서 우클릭 방지를 하고싶다면 ContextMenusEnabled 값을 false로 주면 된다

 

 

<Window x:Class="webView.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:webView"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <Canvas Background="SkyBlue" Grid.Row="0">
            <Button x:Name="callWebView" Click="callWebView_Click" >웹뷰열기</Button>
        </Canvas>
        <Grid  Background="Salmon" Grid.Row="1" x:Name="webViewGrid"></Grid>
    </Grid>
</Window>

 

 

 

참고 : https://learn.microsoft.com/en-us/microsoft-edge/webview2/get-started/winforms

 

Get started with WebView2 in WinForms apps - Microsoft Edge Development

Getting started guide for using WebView2 for WinForms apps.

learn.microsoft.com

 

반응형
반응형

보통은 CP850 인코딩 방식을 사용하므로 영어가 아닌 언어를 사용할때는 그에맞는 방식을 추가해주어야 한다 함

따라서 영어가 아닌 언어를 쓸때는 다른 코드페이지로 변경해주어야한다

 

※코드페이지 란

코드 페이지(code page)는 특정한 문자 인코딩 테이블을 위해 쓰이는 전통적인 IBM 용어이다.
문자 인코딩 테이블 부터 255까지의 정수를 표현하는 단일 옥텟(octet, 바이트)이라고 불리는 일련의 비트들이 특정한 문자와 결합하여 표화(mapping)한 것이다.
IBM과 마이크로소프트는 코드 페이지를 문자열 집합(charset)에 자주 할당한다.

 

437 원래의 IBM PC 코드 페이지
737 그리스어
850 "다중 언어 (라틴 1)" (서양 유럽 언어) 
852 "슬라브어 (라틴 2)" (동유럽 언어) 
855 키릴 자모 알파벳 
857 튀르키예어 
858 "다중 언어" - 유로 기호 
860 포르투갈어 
861 아이슬란드어 
863 프랑스 캐나다어 
865 북유럽어 
862 히브리어 
866 키릴 자모 알파벳 
869 그리스어 
10000 매킨토시 로마어 인코딩 (몇몇의 다른 맥 문자열 세트를 따름) 
10007 매킨토시 키릴 자모 인코딩 
10029 매킨토시 중앙유럽어 인코딩
932 일본어 지원 
936  GBK 중국어 간체자 지원 
949 한국어 지원 
950 중국어 번체자 (대만) 지원 
1200 UCS-2LE 유니코드 little-endian 
1201 UCS-2BE 유니코드 big-endian 
65000 UTF-7 유니코드 
65001 UTF-8 유니코드 
ASMO449+ 아랍어 지원 
MIK 불가리아어, 러시아어 지원

 

 

한글 utf-8 인코딩 방식 기준으로 65001로 변경하여 사용

 

chcp 65001

 

 

 

 

참고 : https://ss64.com/nt/chcp.html

 

CHCP - Change Code Page - Windows CMD - SS64.com

Change the active console Code Page. The default code page is determined by the Windows Locale. This command is rarely required as most GUI programs and PowerShell now support Unicode. When working with characters outside the ASCII range of 0-127, such as

ss64.com

https://stackoverflow.com/questions/1427796/batch-file-encoding

 

Batch file encoding

I would like to deal with filename containing strange characters, like the French é. Everything is working fine in the shell: C:\somedir\>ren -hélice hélice I know if I put this line in a .ba...

stackoverflow.com

https://ss64.com/nt/chcp.html

 

CHCP - Change Code Page - Windows CMD - SS64.com

Change the active console Code Page. The default code page is determined by the Windows Locale. This command is rarely required as most GUI programs and PowerShell now support Unicode. When working with characters outside the ASCII range of 0-127, such as

ss64.com

 

반응형

+ Recent posts