반응형
import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int testcase = sc.nextInt(); sc.nextLine();
        for(int i=0; i<testcase; i++) {
            Stack <String> stack = new Stack<>();
            String str = sc.nextLine();
            for(int j=0; j<str.length(); j++) {
                String first = str.substring(j, j+1);
                if(first.equals("(")) {
                    stack.push(first);
                }
                else {
                    if(stack.isEmpty()) {
                        System.out.println("NO");
                        break;
                    }
                    else {
                        stack.pop();
                    }
                }

                if(j == str.length()-1) {
                    if(stack.isEmpty()) {
                        System.out.println("YES");
                    }
                    else {
                        System.out.println("NO");
                    }
                }
            }
        }
    }
}

 

기본적으로 스택으로 구성을 했다. (큐로해도 상관은 없을 것 같다.)

그리고 "(" 가 들어왔을 땐, 그냥 스택에 쌓고

")" 가 들어 왔을땐, 스택이 비어있다면 바로 NO 출력, 스택에 값이 있다면, 값을 빼준다.

그리고 최종적으로 스택이 비어있다면 YES 아니면 NO 를 출력해준다.

반응형

'Algorithm > 문자열' 카테고리의 다른 글

Programmers 신규 결과 받기  (0) 2022.01.17
Programmers 신규 아이디 추천  (0) 2022.01.16
Programmers 신고 결과 받기  (0) 2022.01.16
반응형

언어 : Python

Link : https://programmers.co.kr/learn/courses/30/lessons/67256

프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

 

풀이 :

솔직히 어려운건아니다. distance 함수의 각 손의 위치와 키패드 간의 거리를 구할 수 있으면 
그냥 문제에서 주어진 대로 단계별로 해결해 나가면 되는 문제이다.
단, 주의할 점이 *, 0, # 일때인데, 이때는 각각 10, 11, 12로 치환하여 문제를 풀이 한다.

 

코드

def distance(sequence, hand):
    return abs(sequence - hand) // 3 + abs(sequence - hand) % 3

def solution(numbers, hand):
    answer = ''
    left = 10
    right = 12
    for sequence in numbers:
        if sequence == 0:
            sequence = 11

        if sequence == 1 or sequence == 4 or sequence == 7:
            answer += 'L'
            left = sequence
        elif sequence == 3 or sequence == 6 or sequence == 9:
            answer += 'R'
            right = sequence
        else:
            if distance(sequence, left) == distance(sequence, right):
                if hand == "right":
                    answer += 'R'
                    right = sequence
                else:
                    answer += 'L'
                    left = sequence
            elif distance(sequence, left) < distance(sequence, right):
                answer += 'L'
                left = sequence
            else:
                answer += 'R'
                right = sequence
    return answer

 

 

 

 

 

 

 

반응형

'Algorithm > 문자열' 카테고리의 다른 글

baekjoon 9012  (0) 2025.02.10
Programmers 신규 아이디 추천  (0) 2022.01.16
Programmers 신고 결과 받기  (0) 2022.01.16
반응형

언어 : 파이썬

 

LINK : https://programmers.co.kr/learn/courses/30/lessons/72410

프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

 

2021 KAKAO BLIND RECRUITMENT 신규 아이디 추천

 

1단계이다.. 마찬가지로 파이썬 문법 공부 겸사겸사 푼 문제다.

확실히 카카오나 네이버 코테는 단순 구현하는 문제도 많다.
그래서 문자열 자르고 붙이고 하는 건 필수로 알아야하는것 같다 ㅠㅠ

 

코드

def solution(new_id):     answer = ''      specialCharactor = ['-', '_', '.']     yn = True def solution(new_id):     answer = ''      specialCharactor = ['-', '_', '.']     yn = True      if (len(new_id) >= 3 and len(new_id) <= 15):         for i in range(len(new_id)):             if (i == 0 or i == len(new_id) - 1):                 if (new_id[i] == '.'):                     yn = False                     break             if ((i != 0) and (new_id[i - 1] == '.' and new_id[i] == '.')):                 yn = False                 break              if (new_id[i].isdigit() or new_id[i].islower() or new_id[i] in specialCharactor):                 yn = True             else:                 yn = False                 break     else :         yn = False      deleteCharactor = []      if (yn == True):         answer = new_id     else:         # step 1         new_id = new_id.lower()         for i in range(len(new_id)) :             if((new_id[i] not in specialCharactor) and (not new_id[i].isdigit()) and (not new_id[i].islower())) :                 deleteCharactor.append(new_id[i])          # step 2         for temp in deleteCharactor :             new_id = new_id.replace(temp, "")          # step 3         temp = new_id[0]         for i in range(1, len(new_id)) :             if new_id[i] != "." :                 temp += new_id[i]             elif temp[len(temp)-1] == "." and new_id[i] == "." :                 continue             else :                 temp += new_id[i]         new_id = temp          # step 4         if len(new_id) >= 1 and new_id[0] == "." :             new_id = new_id[1:]         if len(new_id) >= 1 and new_id[len(new_id)-1] == "." :             new_id = new_id[:len(new_id)-1]          # step 5         if len(new_id) == 0 :             new_id += "a"          # step 6         if len(new_id) >= 16 :             new_id = new_id[:15]             if(new_id[14] == ".") :                 new_id = new_id[:14]          # step 7         new_id_fill = 3-len(new_id)         fill_number = new_id[len(new_id)-1]         if len(new_id) <= 2 :             for i in range (0, new_id_fill) :                 new_id += fill_number          answer = new_id      return answer      if (len(new_id) >= 3 and len(new_id) <= 15):         for i in range(len(new_id)):             if (i == 0 or i == len(new_id) - 1):                 if (new_id[i] == '.'):                     yn = False                     break             if ((i != 0) and (new_id[i - 1] == '.' and new_id[i] == '.')):                 yn = False                 break              if (new_id[i].isdigit() or new_id[i].islower() or new_id[i] in specialCharactor):                 yn = True             else:                 yn = False                 break     else :         yn = False      deleteCharactor = []      if (yn == True):         answer = new_id     else:         # step 1         new_id = new_id.lower()         for i in range(len(new_id)) :             if((new_id[i] not in specialCharactor) and (not new_id[i].isdigit()) and (not new_id[i].islower())) :                 deleteCharactor.append(new_id[i])          # step 2         for temp in deleteCharactor :             new_id = new_id.replace(temp, "")          # step 3         temp = new_id[0]         for i in range(1, len(new_id)) :             if new_id[i] != "." :                 temp += new_id[i]             elif temp[len(temp)-1] == "." and new_id[i] == "." :                 continue             else :                 temp += new_id[i]         new_id = temp          # step 4         if len(new_id) >= 1 and new_id[0] == "." :             new_id = new_id[1:]         if len(new_id) >= 1 and new_id[len(new_id)-1] == "." :             new_id = new_id[:len(new_id)-1]          # step 5         if len(new_id) == 0 :             new_id += "a"          # step 6         if len(new_id) >= 16 :             new_id = new_id[:15]             if(new_id[14] == ".") :                 new_id = new_id[:14]          # step 7         new_id_fill = 3-len(new_id)         fill_number = new_id[len(new_id)-1]         if len(new_id) <= 2 :             for i in range (0, new_id_fill) :                 new_id += fill_number          answer = new_id      return answer

 

 

반응형

'Algorithm > 문자열' 카테고리의 다른 글

baekjoon 9012  (0) 2025.02.10
Programmers 신규 결과 받기  (0) 2022.01.17
Programmers 신고 결과 받기  (0) 2022.01.16
반응형

언어 : 파이썬

 

LINK https://programmers.co.kr/learn/courses/30/lessons/92334

 

2022 KAKAO BLIND RECRUITMENT 신고 결과 받기

솔직히 봤을때 어려운건 아니지만, 항상 JAVA로 구현하다가 다시 Python 으로 코테를
풀어보기 시작했다. 문법은 다까먹은 상태.. 코테도 정말오랜만에 풀어서 1단계 문제임에도 불구하고 고전했다.

코드

def solution(id_list, report, k):     answer = []     result = [0 for i in range(len(id_list))]     reportCount = [0 for i in range(len(id_list))]      dic = {}     for i in range(len(id_list)) :         dic[id_list[i]] = i      check = [[0] * len(id_list) for i in range(len(id_list))]     for i in range(len(report)) :         reportSplit = report[i].split(" ")         if(check[dic[reportSplit[0]]][dic[reportSplit[1]]] != 1) :             check[dic[reportSplit[0]]][dic[reportSplit[1]]] = 1             reportCount[dic[reportSplit[1]]] = reportCount[dic[reportSplit[1]]]+1      check = [[0] * len(id_list) for i in range(len(id_list))]     for i in range(len(report)) :         reportSplit = report[i].split(" ")         if(reportCount[dic[reportSplit[1]]] >= k and check[dic[reportSplit[0]]][dic[reportSplit[1]]] != 1) :             check[dic[reportSplit[0]]][dic[reportSplit[1]]] = 1             result[dic[reportSplit[0]]] = result[dic[reportSplit[0]]] + 1     answer = result      return answer 

일단 본인은 각각의 사용자가 문자열로 들어오기 때문에, 딕셔너리를 통하여 숫자로 변환해주는 변수르르 사용했다. 그리고 각각의 check 2차원 배열이 2번 사용되는데 첫번째는, 한명이 여러번 신고를 막기 위한 배열, 두번째 check 배열 또한 비슷하다. 한명이 여러번 신고 했을 경우 마지막 결과값도 중복이 막기 위한 배열.

확실히 JAVA 보다 Python을 통한 문제풀이가 용이하다. 대학교때, 코테준비를 파이썬으로 보통 많이 하였는데, 취업하면서 Java만 사용하다보니, 파이썬에 소홀하여 자바로 준비했는데.. 확실히 파이썬이 직관성도 뛰어나서 굉장히 편함..(내생각)

실행 결과

반응형

'Algorithm > 문자열' 카테고리의 다른 글

baekjoon 9012  (0) 2025.02.10
Programmers 신규 결과 받기  (0) 2022.01.17
Programmers 신규 아이디 추천  (0) 2022.01.16

+ Recent posts