숫자의 합

img

백준 알고리즘 11720#

첫째줄에 숫자의 갯수를 적어주고 둘째줄에 입력한 수의 합을 구해주는 단순한 구조

둘째줄의 수는 정수의 의미라기보다는 공백없는 숫자들의 나열, 즉 문자열이라 봐야 해결가능한 문제다.

파이썬에서 기본적으로 입력받은 값은 문자열이다.

이를 int, float등 형 변환 해주지 않으면 수가 입력되더라도

문자열이므로 각 자릿수들을 분리하는 것이 매우 간단하다.

이후, 각 문자들을 정수로 변환해주고 합산해주면 끝

img

x가 둘째줄이고, 합을 구하는 과정에서 int형으로 형변환 해주는 것이 핵심

img

알파벳 찾기

img

백준 알고리즘 10809#

소문자로만 이루어진 단어를 입력하면

a~z까지 단어에 각각 처음 등장하는 위치를 출력해주는 프로그램

첫번째 위치는 0부터 시작하며, 존재하지 않을 경우는 -1을 출력

첫번째로 생각할 것이 단어와 알파벳이 주어졌을 때, 단어에 해당 알파벳이 존재하는지 확인하는 함수다.

둘째로는 a~z까지 각각 이 함수들을 써서 각 위치들을 출력해주는 것

알파벳이 존재하는지 확인하는 함수는 단어의 0번 위치부터 끝 위치까지

내가 입력한 알파벳과 같은 알파벳이 있는지 확인해보면 된다.

is_In(word,char)

a~z까지 각각 이 함수들을 호출한다고 했을 때, 각각 함수 호출을 할 것인가?

is_In(word,'a')
is_In(word,'b')
....
is_In(word,'z')

이 방법은 너무 비효율으로 보인다.

문자를 아스키 코드로 변환하면 정수가 된다.

정수가 된다는 것은 쉽게 반복문을 이용할 수 있다는 뜻이다.

a의 아스키 코드는 97이고, z의 아스키 코드는 122이다.

따라서 97~122까지 반복하는 반복문으로 확인하면 된다.

정수 -> 아스키 : chr()   
    ex) chr(97) = 'a' 

아스키 -> 정수 : ord()   
    ex) ord('a') = 97

img

결과 출력이 한줄에 띄어쓰기로 구분하여 출력하고 마지막 z의 위치를 찍고 바로 개행하므로

if문으로 출력하는 형태에 분기를 주었다.

img

img

문자열 반복

img

백준 알고리즘 2675#

그냥 문제에서 하라는 대로 코딩을 할 줄만 알면 될 것 같다..

\1) 테스트 케이스만큼 반복하는 반복문을 만들고

\2) 각 케이스에서 숫자와 단어를 입력받아서 단어의 각 자리의 문자를 숫자만큼 반복해서 출력해주기

img

img

img

#1157 단어 공부

img

백준 알고리즘 1157#

대소문자를 구별하지 않고 각 단어의 나온 횟수를 체크해서

가장 많이 나온 단어를 대문자로 출력해주는 것이 문제다.

하나가 아닐 경우에만 ?를 출력해주면 됨

직관적으로 쉽게 표현하자면

a~z까지 카운트를 셀 수 있는 배열을 만들고 해당 단어가 나올 때마다 1씩 증가시켜주고

최대값 구하는 알고리즘으로 최대값이 존재하는 곳의 알파벳을 출력해주면 될 것 같다.

단, 최댓값이 한개가 아닐경우에만 ? 출력

a~z까지를 인덱스로 표현하려면 아스키코드를 활용하면 될 것 같다.

알파벳은 총 26개다.

img

  1. a~z까지 각각 나온 횟수를 기록하는 alpah_Count라는 배열을 생성하고 0으로 채워준다.

단어를 입력받고, 각 단어들을 아스키 코드로 변환하면 인덱스 번호로 만들 수 있다.

다만 대소문자 구별하지 않으므로 대문자인 경우와 소문자인 경우로 나눠서 카운트를 증가시켜준다.

  1. 최댓값을 출력해주면 되는데, 만약 최댓값이 한 개가 아닌 경우 ?를 출력해주는 함수를 만든다.

img

img

s4개 i4개 이므로 ? 출력

img

z가 제일 많이 나왔으므로 z 출력

img

무려 정답률 38%의 꽤 난이도 있는 문제였다.

#1152 단어의 개수

img

백준 알고리즘 1152#

이 문제에서 요구하는 단어의 갯수는

(공백의 갯수 + 1) 이라고 생각하면 될 것 같다.

중복단어의 갯수는 고려하지 않기 때문에, 말그대로 단어의 가짓수가 아닌 단어의 갯수이다.

즉, 공백을 기준으로 단어를 처리해주면 되는 것이다.

공백을 기준으로 문자열을 쪼개주는 함수인 split()을 활용할 수 있다.

그러면 각 단어들이 나눠져서 배열에 담긴다.

이 배열의 크기가 단어의 갯수라고 보면 된다.

img

img

이렇게 쓰면 코드가 직관적이지 않아서 예쁘지는 않지만

한줄로 표현할 수 있어서 효율적이긴 하다.

img

굉장히 간단한 문제지만 의외로 정답률이 28%다.

split()함수를 모르더라도 공백의 갯수를 체크하고 + 1 해주면 되는 문제였는데

의외로 어려웠나보다.