[TIL] 정글 98일차 - 나만의 무기

신승준·2022년 7월 5일
0

알고리즘

백준

  • 수학
  • 11816 8진수, 10진수, 16진수
import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline

n = input().rstrip()

def check(n):
    if len(n) <= 1:
        return int(n)

    # 16진수
    if n[0] == '0' and n[1] == 'x':
        n = list(n)
        
        now = -1
        count = 0
        result = 0
        
        while n[now] != 'x':
            if n[now] == 'a':
                n[now] = 10
            
            elif n[now] == 'b':
                n[now] = 11
                
            elif n[now] == 'c':
                n[now] = 12
                
            elif n[now] == 'd':
                n[now] = 13
                
            elif n[now] == 'e':
                n[now] = 14
            
            elif n[now] == 'f':
                n[now] = 15
            
            result += int(n[now]) * 16**count
            now -= 1
            count += 1
            
        return result
            
        
    # 8진수
    elif n[0] == '0' and n[1] != 'x':
        n = list(n)
        
        now = -1
        count = 0
        result = 0
        
        while now != -len(n):
            result += int(n[now]) * 8**count
            now -= 1
            count += 1
        
        return result

    # 10진수
    else:
        return int(n)
    
print(check(n))
  • 문자열
    • 8595 히든 넘버
      • 백준은 테스트 케이스가 적거나 이상하게 주어지면 예외처리 하는게 쉽지 않다.
      • 질문의 도움을 받아 겨우 맞췄다.
      • stack을 사용했고, 이 stack은 오로지 숫자인 문자열을 저장한다.
      • 만약 숫자를 더해야하는 순간, 즉 숫자가 stack에 저장되다가 문자인 문자열이 들어오면 result에 그동안 stack에 모아뒀던 숫자들을 더하게 된다.
        • 하지만 이 때 6자리를 넘기면 유효하지 않으므로 6자리를 넘기면 유효하지 않은 숫자로 판단하고 stack을 비우게 만들었다.
        • 그리고 입력값이 마지막에 숫자로 끝나면 마지막 숫자는 더해지지 않고 for문이 끝나버린다.
          • 즉 for문이 끝나고 나서 stack에 원소가 남아 있을 경우, 6자리 이상의 숫자가 아니면 또 result에 더해줘야 한다.
import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline

n = int(input())
string = input().rstrip()
result = 0
stack = list()

for i in range(len(string)):
    if string[i].isalpha() == True:
        if stack and stack[-1].isalpha() == False:
            if len(stack) > 6:
                while len(stack) != 0:
                    stack.pop()
                    continue
            
            result += int(''.join(stack))
            # pop
            while len(stack) != 0:
                stack.pop()
            
    else:
        stack.append(string[i])
        
if stack and len(stack) <= 6:
    result += int(''.join(stack))
        
print(result)
  • 리트코드
    • 문자열 조작
      • 125 Valid Palindrome
        • 문자와 숫자를 포함한다는 조건을 놓쳤다. 문자만 따지면 된다고 생각하여 isalpha를 썼었으나 숫자까지 같이 포함하기 때문에 isalnum을 써야 한다.
class Solution:
    def isPalindrome(self, s: str) -> bool:
        if s == " ":
            return True
        
        temp = list()
        
        for string in s:
            if string.isalnum():
                temp.append(string)
        
        return ''.join(temp).lower() == ''.join(temp[::-1]).lower()

언어

JavaScript


궁금한 점

하루를 마치고

초안 발표를 준비하면서 백엔드인 팀원들과 협업하려면 개념이라도 알아야 할 것들이 많다는 생각이 들었다. redis, nginx 등등 처음 들어보는 용어와 기술들이 많았다. 영상을 통해서 조금씩이라도 개념을 익혀놔야겠다.

profile
메타몽 닮음 :) email: alohajune22@gmail.com

0개의 댓글