사과먹는중
당근먹는하니
귀엽고 행복해
당근먹는하니
전체 방문자
오늘
어제
  • 분류 전체보기 (274)
    • 다람쥐🐿 (26)
    • C++ 공부빵야 (7)
    • 공부👻 (5)
    • 프론트엔드✏️ (228)
      • 코드캠프 (120)
      • 팀 프로젝트✨ (31)
      • 개인공부 (67)
    • 프론트엔드 - 바닐라js (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • algorithm
  • React-hook-form
  • 코딩
  • CSS
  • javascript
  • 회고
  • 팀프로젝트
  • 팀플
  • 팀 프로젝트
  • 배포
  • 프론트엔드
  • react
  • JS
  • 알고리즘
  • 배열
  • HTML
  • 프로그래머스
  • 코드캠프
  • 코딩 부트캠프
  • 자바스크립트
  • 부트캠프
  • typescript
  • 리액트
  • graphql
  • 공통 컴포넌트
  • emotion
  • javascrpit
  • next.js
  • refreshtoken
  • ssg

최근 댓글

최근 글

티스토리

250x250
반응형
hELLO · Designed By 정상우.
당근먹는하니
프론트엔드✏️/코드캠프

알고리즘 - forEach, map

알고리즘 - forEach, map
프론트엔드✏️/코드캠프

알고리즘 - forEach, map

2022. 5. 23. 19:13
728x90
반응형

문자열 내 p와 y의 개수

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요.
'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다.
단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.
function solution(s) {
  let answer = true;
  let p = 0;
  let y = 0;
  for(let i = 0; i < s.length; i++) {
    console.log(s[i]); // 문자열 하나씩 가져오기 확인
    if(s[i]==='p' || s[i]==='P') {
      p++;
    } else if (s[i]==='y' || s[i] === 'Y') {
      y++
    }
  }
  console.log(p, y)
  answer = p===y;
  return answer;
}

solution('Syou')

알고리즘..아날저글링이 푸는거 좋아하겠다 ^^

 

 

코드 줄이기

처음부터 모두 소문자로 바꾼 뒤 계산하면 대문자 확인 할 필요가 없다. 

    s[i] === 'p' ? p++ : y++

p나 y가 아닌 다른 문자열이 들어올 때는, 즉 obj[s[i]] === undefined 일 때는 obj[s[i]] = 0 초기값을 0으로 준다.

 

function solution(s) {
  s = s.toLowerCase();
  const obj = {p: 0, y: 0}
  for(let i = 0; i < s.length; i++) {
    if(obj[s[i]] === undefined) obj[s[i]] = 0
    obj[s[i]]++
  }
	return obj.p===obj.y
}

헉...완전 신기해

 

근데 이걸 또 줄인다 . . .? 

맵은 배열 형태를 리턴하니까, 굳이 그걸로 받을 필요 없어~~~ foreach 쓰겠음

 

forEach는 반환값이 없다!

 

function solution(s) {
  s = s.toLowerCase()
  const obj = {}
  const str = s.split('').forEach(str =>  {
  obj[str] === undefined ? obj[str] = 1 : obj[str]++
	})
return obj.p === obj.y 
}

어 이거 맞나

 

function solution(s) {
  return s.toLowerCase().split('p').length === s.toLowerCase().split('y');
}

진짜 천재 같애 머야..? 

p를 기준으로 분할, y를 기준으로 분할

 

* split은 아무인자도 전달하지 않으면 문자열 전체를 length가 1인 배열에 담아서 리턴한다.

* " "로 자르면 스페이스를 구분자로 잘라서 그 조각들을 배열에 저장하여 리턴

* ""로 자르면 공백 포함해서 쪼개서 그 조각들을 배열에 저장하여 리턴

 

그냥 그 구분자가 벽으로 사라진다 생각해~!!!!

 

이상한 뚱땅뚱 만들기

🍯팁^^ console로 answer를 찍어보며 하자...

글짜 쪼개기

 

1. 덩어리로 쪼개기 2. 글자로 쪼개기 3. 짝수 인덱스엔 대문자, 홀수 인덱스엔 소문자

4. ''로 join(배열을 쉼표 빼고 문자열로) 5. 그걸 다시 ' '로 join

function solution(s) {
  const answer = s.split(' ').map(word => word.split('').map((letter, i) => {return i%2 === 0 ? letter.toUpperCase() : letter.toLowerCase()}).join('')).join(' ')
  return answer;
  
  console.log(answer)
}

뭐야 어려워 

728x90
반응형
저작자표시 비영리 동일조건 (새창열림)

'프론트엔드✏️ > 코드캠프' 카테고리의 다른 글

알고리즘 - reverse, sort, 삼항연산자로 return  (0) 2022.05.24
220523 프론트엔드 부트캠프 15일차 : 이벤트 버블링, 라이브러리 사요요  (0) 2022.05.24
antd 라이브러리, 리액트 플레이어 사용하기  (0) 2022.05.23
구조 분해 할당(Destructuring Assignment)  (0) 2022.05.23
Conditional-rendering  (0) 2022.05.23
    '프론트엔드✏️/코드캠프' 카테고리의 다른 글
    • 알고리즘 - reverse, sort, 삼항연산자로 return
    • 220523 프론트엔드 부트캠프 15일차 : 이벤트 버블링, 라이브러리 사요요
    • antd 라이브러리, 리액트 플레이어 사용하기
    • 구조 분해 할당(Destructuring Assignment)
    당근먹는하니
    당근먹는하니

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.