전체 글 (248)
2022-03-01 08:32:31
반응형

연결 - 라이브 vs 추출

 

(1) Tableau public version은 지원 안하며, Tableau Desktop version만 지원

라이브 - 항상 데이터베이스를 향해 직접적으로 쿼리를 날림

추출 - 데이터베이스 현재 상태를 스캔본으로 뜨는 것과 같음

(해당 스캔본을 local pc에 저장하기 때문에 처리 속도 빠름)

 

필터

 

(2) 데이터 원본 필터

 

 

 출처

 

웰컴 투 태블로 월드

https://www.inflearn.com/course/%ED%83%9C%EB%B8%94%EB%A1%9C%EA%B0%95%EC%A2%8C-1

 

 

 

+ 강의 교재

반응형
2022-02-25 17:43:24
반응형

Contains Duplicate 

 

 문제 설명

 

Given an integer array nums, return true if any value appears at least twice in the array, and return false if every element is distinct.

 

 제한 사항

 

 

  • 1 <= nums.length <= 105
  • -109 <= nums[i] <= 109

 

 

 입출력 예

 

Example 1:

Input: nums = [1,2,3,1]
Output: true

Example 2:

Input: nums = [1,2,3,4]
Output: false

Example 3:

Input: nums = [1,1,1,3,3,4,3,2,4,2]
Output: true

 

 

 Python 코드

 

Python code 

class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        return len(set(nums)) != len(nums)

* 참고 링크 : https://leetcode.com/problems/contains-duplicate/discuss/1159570/Python-99.25-faster

https://leetcode.com/problems/contains-duplicate/discuss/471215/Python-sol-by-native-set-and-length.-run-time-90%2B

 

class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
    	hashset = set()
        
        for n in nums:
        	if n in hashset:
            	    return True
        	hashset.add()
        return False

* 참고 링크 : https://www.youtube.com/watch?v=3OamzN90kPg 

 

 C++ 코드

 

C ++ code

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        unordered_map<int,bool> map;
        for(size_t i = 0;i<nums.size();++i)
        {
            if(map[nums[i]]==true)
                return true;
            map[nums[i]]=true;
        }
        return false;
    }
};

* 참고 링크 : https://kkminseok.github.io/posts/leetcode_Contains_Duplicate/

 

 출처

 

https://leetcode.com/problems/contains-duplicate/

반응형
2022-02-25 17:12:29
반응형

평균 구하기

 

 문제 설명

 

자연수 N이 주어진다. N을 이진수로 바꿔서 출력하는 프로그램을 작성하시오.

 

 입력

 

첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 100,000,000,000,000)

 

 출력

 

N을 이진수로 바꿔서 출력한다. 이진수는 0으로 시작하면 안 된다.

 

 Python 코드

 

# 첫째 줄에 자연수 N을 입력하고 정수형으로 변환
N = int(input())

# N을 이진수로 변환하고 앞의 0b를 제외한 값을 저장
N = bin(N)[2:]

# 이진수로 변환한 결과 출력
print(N)

# print(bin(n)[2:])
# print(bin(int(input()))[2:])

* 참고 링크 : https://brightnightsky77.tistory.com/122

def trans(n):
    if (n<1):
        return '0'
    elif (n==1):
        return '1'
    if (n%2==0):
        return trans(int(n/2)) + '0'
    elif (n%2==1):
        return trans(int(n/2)) + '1'

n = int(input())
answer = trans(n)
print(answer)

* 참고 링크 : https://velog.io/@sxxzin/BaekjoonPython%EC%9D%B4%EC%A7%84%EC%88%98-%EB%B3%80%ED%99%98

https://my-coding-notes.tistory.com/137

 C++ 코드

 

#include <iostream>
using namespace std;

int facto(int n) {
	if (n <= 1)
		return 1;
	else
		return n * facto(n - 1);
}

int main() {
	int n;
	cin >> n;
	cout << facto(n) << '\n';
}

* 참고 링크 : https://codesyun.tistory.com/73

 출처

 

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

반응형
2022-02-25 02:05:00
반응형

팩토리얼

 

 문제 설명

 

0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.

 

 입력

 

첫째 줄에 정수 N(0 ≤ N ≤ 12)이 주어진다.

 

 출력

 

첫째 줄에 N!을 출력한다.

 

 

 Python 코드

 

def factorial(n):
    result = 1
    if n > 0:
        result = n * factorial(n-1)
    return result

n = int(input())
print(factorial(n))

 

* 참고 링크 : https://ooyoung.tistory.com/114

 

 C++ 코드

 

#include <cstdio>

int factorial(int n)
{
    if(n <= 1)
        return 1;
    return n * factorial(n-1);
}

int main() {
    int num;
    scanf("%d",&num);
    printf("%d",factorial(num));
}

* 참고 링크 : https://cryptosalamander.tistory.com/36

 출처

 

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

반응형
2022-02-24 11:23:40
반응형

Could not publish server configuration for Tomcat v8.5 Server at localhost.

 

Could not publish server configuration for Tomcat v8.5 Server at localhost.

 

2월 24, 2022 10:22:59 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: 서버 버전 이름: Apache Tomcat/8.5.75

2월 24, 2022 10:22:59 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: Server 빌드 시각: Jan 17 2022 22:07:47 UTC

2월 24, 2022 10:22:59 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: Server 버전 번호: 8.5.75.0

2월 24, 2022 10:22:59 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: 운영체제 이름: Windows 10

2월 24, 2022 10:22:59 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: 운영체제 버전: 10.0

2월 24, 2022 10:22:59 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: 아키텍처: amd64

2월 24, 2022 10:22:59 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: 자바 홈: C:\Program Files\Eclipse Adoptium\jdk-8.0.312.7-hotspot\jre

2월 24, 2022 10:22:59 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: JVM 버전: 1.8.0_312-b07

2월 24, 2022 10:22:59 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: JVM 벤더: Temurin

2월 24, 2022 10:22:59 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: CATALINA_BASE: C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75

2월 24, 2022 10:22:59 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: CATALINA_HOME: C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75

2월 24, 2022 10:22:59 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: 명령 행 아규먼트: -Dcatalina.base=C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75

2월 24, 2022 10:22:59 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: 명령 행 아규먼트: -Dcatalina.home=C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75

2월 24, 2022 10:22:59 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: 명령 행 아규먼트: -Dwtp.deploy=C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps

2월 24, 2022 10:22:59 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: 명령 행 아규먼트: -Djava.endorsed.dirs=C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\endorsed

2월 24, 2022 10:22:59 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: 명령 행 아규먼트: -Dfile.encoding=UTF-8

2월 24, 2022 10:22:59 오전 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
정보: APR 버전 [1.7.0]을(를) 사용한, APR 기반 Apache Tomcat Native 라이브러리 [1.2.30]을(를) 로드했습니다.

2월 24, 2022 10:22:59 오전 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
정보: APR 용량정보들: IPv6 [true], sendfile [true], accept filters [false], random [true].

2월 24, 2022 10:22:59 오전 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
정보: APR/OpenSSL 설정: useAprConnector [false], useOpenSSL [true]

2월 24, 2022 10:22:59 오전 org.apache.catalina.core.AprLifecycleListener initializeSSL
정보: OpenSSL이 성공적으로 초기화되었습니다: [OpenSSL 1.1.1k 25 Mar 2021]

2월 24, 2022 10:23:00 오전 org.apache.coyote.AbstractProtocol init
정보: 프로토콜 핸들러 ["http-nio-8090"]을(를) 초기화합니다.

2월 24, 2022 10:23:06 오전 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
정보: Using a shared selector for servlet write/read

2월 24, 2022 10:23:06 오전 org.apache.catalina.startup.Catalina load
정보: Initialization processed in 9790 ms

2월 24, 2022 10:23:07 오전 org.apache.catalina.core.StandardService startInternal
정보: 서비스 [Catalina]을(를) 시작합니다.

2월 24, 2022 10:23:07 오전 org.apache.catalina.core.StandardEngine startInternal
정보: 서버 엔진을 시작합니다: [Apache Tomcat/8.5.75]

2월 24, 2022 10:23:07 오전 org.apache.catalina.startup.HostConfig deployDescriptor
정보: 배치 descriptor [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\conf\Catalina\localhost\ShopMiniMall.xml]을(를) 배치합니다.

2월 24, 2022 10:23:07 오전 org.apache.catalina.startup.HostConfig deployDescriptor
경고: 호스트 appBase 내의 docBase [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps\step49_ShopMiniMall12_장바구니전체삭제]이(가) 지정되었으나, 이는 무시될 것입니다.

2월 24, 2022 10:23:07 오전 org.apache.catalina.core.ContainerBase addChildInternal

심각: ContainerBase.addChild: start: org.apache.catalina.LifecycleException:
구성요소 [org.apache.catalina.webresources.StandardRoot@4c01392]을(를) 시작하지 못했습니다. at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198) at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4880) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5018) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:753) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:727) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:695) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:673) at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1881) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)

Caused by:
java.lang.IllegalArgumentException: 지정된 주요 리소스셋 [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps\ShopMiniMall]은(는) 유효하지 않습니다. at org.apache.catalina.webresources.StandardRoot.createMainResourceSet(StandardRoot.java:747) at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:705) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ... 13 more

2월 24, 2022 10:23:07 오전 org.apache.catalina.startup.HostConfig deployDescriptor
심각: 배치 descriptor [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\conf\Catalina\localhost\ShopMiniMall.xml]을(를) 배치하는 중 오류 발생

java.lang.IllegalStateException: 자식 컨테이너를 시작하는 중 오류 발생 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:757) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:727) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:695) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:673) at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1881) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)

Caused by:
org.apache.catalina.LifecycleException: 구성요소 [org.apache.catalina.webresources.StandardRoot@4c01392]을(를) 시작하지 못했습니다. at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198) at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4880) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5018) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:753) ... 9 more

Caused by:
java.lang.IllegalArgumentException: 지정된 주요 리소스셋 [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps\ShopMiniMall]은(는) 유효하지 않습니다. at org.apache.catalina.webresources.StandardRoot.createMainResourceSet(StandardRoot.java:747) at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:705) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ... 13 more

2월 24, 2022 10:23:07 오전 org.apache.catalina.startup.HostConfig deployDescriptor
정보: 배치 descriptor [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\conf\Catalina\localhost\ShopMiniMall.xml]의 배치가 [183] 밀리초 내에 완료되었습니다.

2월 24, 2022 10:23:07 오전 org.apache.catalina.startup.HostConfig deployDescriptor
정보: 배치 descriptor [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\conf\Catalina\localhost\step51_miniproject_homepage.xml]을(를) 배치합니다.

2월 24, 2022 10:23:07 오전 org.apache.catalina.startup.HostConfig deployDescriptor
경고: 호스트 appBase 내의 docBase [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps\step51_miniproject_homepage]이(가) 지정되었으나, 이는 무시될 것입니다.

2월 24, 2022 10:23:08 오전 org.apache.catalina.startup.HostConfig deployDescriptor
정보: 배치 descriptor [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\conf\Catalina\localhost\step51_miniproject_homepage.xml]의 배치가 [1,591] 밀리초 내에 완료되었습니다.

2월 24, 2022 10:23:08 오전 org.apache.catalina.startup.HostConfig deployDirectory
정보: 웹 애플리케이션 디렉토리 [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps\docs]을(를) 배치합니다.

2월 24, 2022 10:23:09 오전 org.apache.catalina.startup.HostConfig deployDirectory
정보: 웹 애플리케이션 디렉토리 [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps\docs]에 대한 배치가 [173] 밀리초에 완료되었습니다.

2월 24, 2022 10:23:09 오전 org.apache.catalina.startup.HostConfig deployDirectory
정보: 웹 애플리케이션 디렉토리 [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps\examples]을(를) 배치합니다.

2월 24, 2022 10:23:13 오전 org.apache.catalina.core.ApplicationContext log
정보: ContextListener: contextInitialized()

2월 24, 2022 10:23:13 오전 org.apache.catalina.core.ApplicationContext log
정보: SessionListener: contextInitialized()

2월 24, 2022 10:23:13 오전 org.apache.catalina.core.ApplicationContext log
정보: ContextListener: attributeAdded('StockTicker', 'async.Stockticker@1adad3e5')

2월 24, 2022 10:23:13 오전 org.apache.catalina.startup.HostConfig deployDirectory
정보: 웹 애플리케이션 디렉토리 [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps\examples]에 대한 배치가 [4,372] 밀리초에 완료되었습니다.

2월 24, 2022 10:23:13 오전 org.apache.catalina.startup.HostConfig deployDirectory
정보: 웹 애플리케이션 디렉토리 [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps\host-manager]을(를) 배치합니다.

2월 24, 2022 10:23:13 오전 org.apache.catalina.startup.HostConfig deployDirectory
정보: 웹 애플리케이션 디렉토리 [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps\host-manager]에 대한 배치가 [205] 밀리초에 완료되었습니다.

2월 24, 2022 10:23:13 오전 org.apache.catalina.startup.HostConfig deployDirectory
정보: 웹 애플리케이션 디렉토리 [C:\playdata\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps\manager]을(를) 배치합니다.

2월 24, 2022 10:23:13 오전 org.apache.catalina.startup.HostConfig deployDirectory
정보: 웹 애플리케이션 디렉토리 [C:\playdata\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps\manager]에 대한 배치가 [244] 밀리초에 완료되었습니다.

2월 24, 2022 10:23:13 오전 org.apache.catalina.startup.HostConfig deployDirectory 정보: 웹 애플리케이션 디렉토리 [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps\ROOT]을(를) 배치합니다.

2월 24, 2022 10:23:14 오전 org.apache.catalina.startup.HostConfig deployDirectory 정보: 웹 애플리케이션 디렉토리 [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps\ROOT]에 대한 배치가 [309] 밀리초에 완료되었습니다.

2월 24, 2022 10:23:14 오전 org.apache.catalina.startup.HostConfig deployDirectory
정보: 웹 애플리케이션 디렉토리 [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps\step46_web15_board2]을(를) 배치합니다.

2월 24, 2022 10:23:14 오전 org.apache.catalina.startup.HostConfig deployDirectory
정보: 웹 애플리케이션 디렉토리 [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps\step46_web15_board2]에 대한 배치가 [113] 밀리초에 완료되었습니다.

2월 24, 2022 10:23:14 오전 org.apache.catalina.startup.HostConfig deployDirectory
정보: 웹 애플리케이션 디렉토리 [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps\step49_miniproject_ShopMiniMall06_로그아웃]을(를) 배치합니다.

2월 24, 2022 10:23:14 오전 org.apache.catalina.startup.HostConfig deployDirectory
정보: 웹 애플리케이션 디렉토리 [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps\step49_miniproject_ShopMiniMall06_로그아웃]에 대한 배치가 [88] 밀리초에 완료되었습니다.

2월 24, 2022 10:23:14 오전 org.apache.catalina.startup.HostConfig deployDirectory 정보: 웹 애플리케이션 디렉토리 [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps\step49_ShopMiniMall12_장바구니전체삭제]을(를) 배치합니다.

2월 24, 2022 10:23:19 오전 org.apache.jasper.servlet.TldScanner scanJars 정보: 적어도 하나의 JAR가 TLD들을 찾기 위해 스캔되었으나 아무 것도 찾지 못했습니다. 스캔했으나 TLD가 없는 JAR들의 전체 목록을 보시려면, 로그 레벨을 디버그 레벨로 설정하십시오. 스캔 과정에서 불필요한 JAR들을 건너뛰면, 시스템 시작 시간과 JSP 컴파일 시간을 단축시킬 수 있습니다.

2월 24, 2022 10:23:19 오전 org.apache.catalina.startup.HostConfig deployDirectory
정보: 웹 애플리케이션 디렉토리 [C:\test\apache-tomcat-8.5.75\apache-tomcat-8.5.75\webapps\step49_ShopMiniMall12_장바구니전체삭제]에 대한 배치가 [4,795] 밀리초에 완료되었습니다.

2월 24, 2022 10:23:19 오전 org.apache.coyote.AbstractProtocol start
정보: 프로토콜 핸들러 ["http-nio-8090"]을(를) 시작합니다.

2월 24, 2022 10:23:19 오전 org.apache.catalina.startup.Catalina start 정보: Server startup in 12433 ms

 

 

 해결방법

 

아직 해결하지 못하고 있다.

 

 

 

 출처

 

 

+ 강의 교재

반응형
2022-02-18 16:18:08
반응형

Hashing

 

 문제 설명

 

APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정의한다. 해시 함수는 무궁무진한 응용 분야를 갖는데, 대표적으로 자료의 저장과 탐색에 쓰인다.

이 문제에서는 여러분이 앞으로 유용하게 쓸 수 있는 해시 함수를 하나 가르쳐주고자 한다. 먼저, 편의상 입력으로 들어오는 문자열에는 영문 소문자(a, b, ..., z)로만 구성되어있다고 가정하자. 영어에는 총 26개의 알파벳이 존재하므로 a에는 1, b에는 2, c에는 3, ..., z에는 26으로 고유한 번호를 부여할 수 있다. 결과적으로 우리는 하나의 문자열을 수열로 변환할 수 있다. 예를 들어서 문자열 "abba"은 수열 1, 2, 2, 1로 나타낼 수 있다.

해시 값을 계산하기 위해서 우리는 문자열 혹은 수열을 하나의 정수로 치환하려고 한다. 간단하게는 수열의 값을 모두 더할 수도 있다. 해시 함수의 정의에서 유한한 범위의 출력을 가져야 한다고 했으니까 적당히 큰 수 M으로 나눠주자. 짜잔! 해시 함수가 완성되었다. 이를 수식으로 표현하면 아래와 같다.

 H=∑i=0l−1aimodM

해시 함수의 입력으로 들어올 수 있는 문자열의 종류는 무한하지만 출력 범위는 정해져있다. 다들 비둘기 집의 원리에 대해서는 한 번쯤 들어봤을 것이다. 그 원리에 의하면 서로 다른 문자열이더라도 동일한 해시 값을 가질 수 있다. 이를 해시 충돌이라고 하는데, 좋은 해시 함수는 최대한 충돌이 적게 일어나야 한다. 위에서 정의한 해시 함수는 알파벳의 순서만 바꿔도 충돌이 일어나기 때문에 나쁜 해시 함수이다. 그러니까 조금 더 개선해보자.

어떻게 하면 순서가 달라졌을때 출력값도 달라지게 할 수 있을까? 머리를 굴리면 수열의 각 항마다 고유한 계수를 부여하면 된다는 아이디어를 생각해볼 수 있다. 가장 대표적인 방법은 항의 번호에 해당하는 만큼 특정한 숫자를 거듭제곱해서 곱해준 다음 더하는 것이 있다. 이를 수식으로 표현하면 아래와 같다.

 H=∑i=0l−1airimodM

보통 r과 M은 서로소인 숫자로 정하는 것이 일반적이다. 우리가 직접 정하라고 하면 힘들테니까 r의 값은 26보다 큰 소수인 31로 하고 M의 값은 1234567891(놀랍게도 소수이다!!)로 하자.

이제 여러분이 할 일은 위 식을 통해 주어진 문자열의 해시 값을 계산하는 것이다. 그리고 이 함수는 간단해 보여도 자주 쓰이니까 기억해뒀다가 잘 써먹도록 하자.

 

 입력

 

첫 줄에는 문자열의 길이 L이 들어온다. 둘째 줄에는 영문 소문자로만 이루어진 문자열이 들어온다.

입력으로 주어지는 문자열은 모두 알파벳 소문자로만 구성되어 있다.

 

 출력

 

문제에서 주어진 해시함수와 입력으로 주어진 문자열을 사용해 계산한 해시 값을 정수로 출력한다.

 

 Python 코드

 

def solution(arr):
    return sum(arr) / len(arr)

 

 

 C++ 코드

 

 

 

 출처

 

 

반응형