HelloMinchan
처음처럼
HelloMinchan
LinkedIn
전체 방문자
오늘
어제
  • 분류 전체보기 (306)
    • Backend (4)
      • NestJS (1)
      • Express (1)
      • Spring (2)
    • Infrastructure (1)
      • AWS (1)
    • Frontend (1)
      • Next.js (1)
    • Language & Runtime (4)
      • Java (2)
      • Node.js (2)
    • Computer Science (8)
      • Computer Networks (3)
      • Operating Systems (4)
      • OOP (1)
    • 독서 (4)
      • 데이터 중심 애플리케이션 설계 (3)
      • 객체지향의 사실과 오해 (1)
    • 회고 (4)
      • Project (2)
      • Career (2)
    • Deprecated (280)

채널

  • GitHub
  • LinkedIn

최근 글

태그

  • 프로그래머스Python
  • programmers
  • 백준Python
  • 프로그래머스C++
  • 알고스팟Python
  • 프로그래밍
  • 데이터베이스
  • Baekjoon Online Judge
  • 코딩
  • 백준Go
  • 개발자
  • front-end
  • back-end
  • 프로그래머스
  • 백준C++
  • Algospot
  • 백엔드
  • Database
  • 백준
  • 알고스팟

최근 댓글

인기 글

hELLO
HelloMinchan

처음처럼

[Baekjoon Online Judge] 백준 1316번 그룹 단어 체커(Python)
Deprecated

[Baekjoon Online Judge] 백준 1316번 그룹 단어 체커(Python)

2020. 3. 23. 00:44

© 2020 All Rights Reserved. 주식회사 스타트링크

[Baekjoon Online Judge] 백준 1316번 그룹 단어 체커

(Python)

(글쓴날 : 2020.03.23)

 


* Baekjoon Online Judge, 백준 1316번 문제 Python 언어 풀이입니다.

* 소스 코드의 저작권은 글쓴이에게 있습니다.


 

 

백준 1316번 그룹 단어 체커


1) 문제

문제 링크 : https://www.acmicpc.net/problem/1316

 

1316번: 그룹 단어 체커

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다. 단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.

www.acmicpc.net


2) 풀이 과정

주어진 단어들 중 그룹 단어의 개수를 구하는 문제입니다.

그룹 단어란 해당 단어의 각 알파벳들이 산발적으로 퍼져있지 않고 한번 사용된 알파벳은 쭉 한 번에 나와야만 하는 단어입니다.

(예를 들어 "aabb"는 그룹 단어이지만, "aaba"는 그룹 단어가 아닙니다.)

 

저의 경우, 각 단어마다 반복문을 돌려 알파벳들을 순차적으로 탐색해 아스키 코드로 변환했고, 변환한 아스키 코드 값을 알파벳이 이전에 나왔었는지 확인하는 리스트의 인덱스로 활용하여 해당 인덱스의 값을 False에서 True로 변경하는 식으로 접근했습니다.

이렇게 되면, 이전에 탐색됐던 알파벳이 다른 알파벳이 나온 후 한 번 더 나왔을 때, 확인 리스트의 값이 True일 테니 그룹 단어가 아닌 것을 판별할 수 있으므로, 이 경우 전체 단어의 개수에서 1씩 차감하여 총 그룹 단어의 개수를 구해 문제를 해결하였습니다.


3) 코드

 

* Python 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import sys
input = sys.stdin.readline
 
tot = int(input())
for _ in range(tot):
    visit = [False] * 26
    word = list(input().rstrip())
    pre = word[0]
    for i in word:
        if visit[ord(i) - 97] == True:
            tot -= 1
            break
        else:
            if pre == i:
                pre = i
            else:
                visit[ord(pre) - 97] = True
                pre = i
 
print(tot)

 

저작자표시 비영리 변경금지 (새창열림)

'Deprecated' 카테고리의 다른 글

[Algorithm] 유클리드 호제법  (0) 2020.03.23
[Baekjoon Online Judge] 백준 2609번 최대공약수와 최소공배수(Python)  (0) 2020.03.23
[Baekjoon Online Judge] 백준 2884번 알람 시계(Python)  (0) 2020.03.23
[Baekjoon Online Judge] 백준 2941번 크로아티아 알파벳(Python)  (0) 2020.03.22
[Baekjoon Online Judge] 백준 5622번 다이얼(Python)  (0) 2020.03.22
    'Deprecated' 카테고리의 다른 글
    • [Algorithm] 유클리드 호제법
    • [Baekjoon Online Judge] 백준 2609번 최대공약수와 최소공배수(Python)
    • [Baekjoon Online Judge] 백준 2884번 알람 시계(Python)
    • [Baekjoon Online Judge] 백준 2941번 크로아티아 알파벳(Python)
    HelloMinchan
    HelloMinchan
    Though you should not fear failure, You should do your very best to avoid it.

    티스토리툴바